Vue: Fehler beim Verwenden mehrerer dynamischer Steckplatznamen (ungültiger dynamischer Argumentausdruck)

Erstellt am 27. März 2019  ·  7Kommentare  ·  Quelle: vuejs/vue

Ausführung

2.6.10

Reproduktionslink

https://github.com/tbutcaru/v-issue-multiple-dynamic-slot-names

Schritte zum Reproduzieren

  1. Klonen Sie dieses Repo: https://github.com/tbutcaru/v-issue-multiple-dynamic-slot-names
  2. Ausführen: npm install
  3. Ausführen: npm run serve

Was wird erwartet?

Mehrere dynamische Steckplatznamen sollten wie erwartet funktionieren.

Was passiert eigentlich?

Der folgende Fehler wird ausgelöst:

Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or =.#[headerslot]>Header slot</template>
    Default slot
    <template #[footerslot]

Wenn einer der dynamischen Steckplatznamen statisch ist (egal welcher), funktioniert die Anwendung.

Meine Untersuchung
  • Datei: node_modules/vue-template-compiler/build.js
  • Zeile: 2563 (innerhalb von attrs.forEach(function (attr) { ) hat die folgende Warnung hinzugefügt:
warn$1('--------------->> ' +  attr.name);
Untersuchungsergebnisse:
  1. Im Arbeitsszenario mit nur einem dynamischen Steckplatznamen: Der Wert dieses dynamischen Steckplatznamens ist #[headerslot]
  2. Im Fehlerszenario mit zwei dynamischen Steckplatznamen: Der Wert des ersten dynamischen Steckplatznamens ist
#[headerslot]>Header slot</template>
    Default slot
    <template #[footerslot]

Es sieht also so aus, als ob der Compiler nicht weiß, wie er nur das Attribut extrahieren kann, wenn mehrere dynamische Slotnamen vorhanden sind.

bug has PR

Hilfreichster Kommentar

Nach vielen Versuchen habe ich einen Weg gefunden, multidynamische Slots zum Laufen zu bringen. Wenn ich dem Stammelement der Dynamics Slot-Vorlagen Schlüssel hinzufüge, fällt dies in die Arbeit:

das funktioniert nicht: hier reproduzieren

   <template #[slot1]>
       <p>slot test</p>
   </template>
   <template #[slot2]>
       <p>slot test2</p>
    </template>

// got "Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or ="

diese Arbeit: hier reproduzieren

   <template #[slot1]>
       <p key="1">slot test</p>
   </template>
   <template #[slot2]>
       <p key="2">slot test2</p>
    </template>

// work fine

Warum muss ich Schlüssel hinzufügen, damit es funktioniert? Ich habe etwas verpasst.

Alle 7 Kommentare

Die Kurzschrift ist nur verfügbar, wenn ein Argument angegeben wird. Versuchen zu benutzen:
<template v-slot:[dynamicSlotName]> ... </template>

Die Kurzschrift ist nur verfügbar, wenn ein Argument angegeben wird. Versuchen zu benutzen:
<template v-slot:[dynamicSlotName]> ... </template>

Ich habe das versucht, bevor ich das Problem erstellt habe, und das Ergebnis ist das gleiche 😞

Hallo allerseits!

Was ist neu daran? Ich habe immer noch das Problem in 2.6.11 hier zu reproduzieren

Nach vielen Versuchen habe ich einen Weg gefunden, multidynamische Slots zum Laufen zu bringen. Wenn ich dem Stammelement der Dynamics Slot-Vorlagen Schlüssel hinzufüge, fällt dies in die Arbeit:

das funktioniert nicht: hier reproduzieren

   <template #[slot1]>
       <p>slot test</p>
   </template>
   <template #[slot2]>
       <p>slot test2</p>
    </template>

// got "Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or ="

diese Arbeit: hier reproduzieren

   <template #[slot1]>
       <p key="1">slot test</p>
   </template>
   <template #[slot2]>
       <p key="2">slot test2</p>
    </template>

// work fine

Warum muss ich Schlüssel hinzufügen, damit es funktioniert? Ich habe etwas verpasst.

Die Lösung von @ davis90 hat bei mir funktioniert. Ich verstehe nicht, warum es auch funktioniert.

Warum sind die Fehler so irreführend? Vielen Dank, obwohl Ihre Lösung funktioniert hat

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

loki0609 picture loki0609  ·  3Kommentare

fergaldoyle picture fergaldoyle  ·  3Kommentare

robertleeplummerjr picture robertleeplummerjr  ·  3Kommentare

bdedardel picture bdedardel  ·  3Kommentare

loki0609 picture loki0609  ·  3Kommentare