Vue: Ошибка ΠΏΡ€ΠΈ использовании Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠΌΠ΅Π½ динамичСских слотов (нСдопустимоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ динамичСского Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°)

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 27 ΠΌΠ°Ρ€. 2019  Β·  7ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: vuejs/vue

ВСрсия

2.6.10

Бсылка для воспроизвСдСния

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

ДСйствия ΠΏΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ это Ρ€Π΅ΠΏΠΎ: https://github.com/tbutcaru/v-issue-multiple-dynamic-slot-names
  2. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ: npm install
  3. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ: npm run serve

Π§Ρ‚ΠΎ оТидаСтся?

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° динамичСских слотов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π§Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ происходит?

ВыдаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ошибка:

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

Если ΠΎΠ΄Π½ΠΎ ΠΈΠ· динамичСских ΠΈΠΌΠ΅Π½ слотов сдСлано статичСским (Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ΅), ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

МоС расслСдованиС
  • Ρ„Π°ΠΉΠ»: node_modules/vue-template-compiler/build.js
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ°: 2563 (Π²Π½ΡƒΡ‚Ρ€ΠΈ attrs.forEach(function (attr) { ) Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:
warn$1('--------------->> ' +  attr.name);
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ расслСдования:
  1. Π’ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ сцСнарии Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ динамичСским ΠΈΠΌΠ΅Π½Π΅ΠΌ слота: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΈΠΌΠ΅Π½ΠΈ динамичСского слота - #[headerslot]
  2. Π’ сцСнарии ошибки с двумя динамичСскими ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ слотов: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ динамичСского ΠΈΠΌΠ΅Π½ΠΈ слота Ρ€Π°Π²Π½ΠΎ
#[headerslot]>Header slot</template>
    Default slot
    <template #[footerslot]

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ компилятор Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠΌΠ΅Π½ динамичСских слотов.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ПослС ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ я нашСл способ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ многодинамичСскиС слоты. Когда я добавляю ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ элСмСнту шаблонов слотов Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ, ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ:

это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚: воспроизвСсти здСсь

   <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 ="

это ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅: воспроизвСсти здСсь

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

// work fine

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π»? Π― Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил.

ВсС 7 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ доступно, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:
<template v-slot:[dynamicSlotName]> ... </template>

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ доступно, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:
<template v-slot:[dynamicSlotName]> ... </template>

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» это, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚!

Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² этом? Π£ мСня всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² 2.6.11 воспроизвСсти здСсь

ПослС ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ я нашСл способ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ многодинамичСскиС слоты. Когда я добавляю ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ элСмСнту шаблонов слотов Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ, ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ:

это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚: воспроизвСсти здСсь

   <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 ="

это ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅: воспроизвСсти здСсь

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

// work fine

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π»? Π― Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил.

РСшСниС @ davis90 сработало для мСня. Π― Ρ‚ΠΎΠΆΠ΅ Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ошибки Π² vue. Бпасибо, хотя вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сработало

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ