Vue: Error al usar varios nombres de ranuras dinámicas (expresión de argumento dinámico no válida)

Creado en 27 mar. 2019  ·  7Comentarios  ·  Fuente: vuejs/vue

Versión

2.6.10

Enlace de reproducción

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

pasos para reproducir

  1. Clona este repositorio: https://github.com/tbutcaru/v-issue-multiple-dynamic-slot-names
  2. Ejecutar: npm install
  3. Ejecutar: npm run serve

¿Lo que es esperado?

Varios nombres de ranuras dinámicas deberían funcionar como se esperaba.

¿Qué está pasando realmente?

Se produce el siguiente error:

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

Si uno de los nombres de las ranuras dinámicas se hace estático (no importa cuál), la aplicación está funcionando.

Mi investigacion
  • archivo: node_modules/vue-template-compiler/build.js
  • line: 2563 (dentro de attrs.forEach(function (attr) { ) agregó la siguiente advertencia:
warn$1('--------------->> ' +  attr.name);
Resultados de la investigación:
  1. En el escenario de trabajo con un solo nombre de ranura dinámica: el valor de ese nombre de ranura dinámica es #[headerslot]
  2. En el escenario de error con dos nombres de ranura dinámicos: el valor del primer nombre de ranura dinámica es
#[headerslot]>Header slot</template>
    Default slot
    <template #[footerslot]

Entonces, parece que el compilador no sabe cómo extraer solo el atributo cuando hay varios nombres de ranuras dinámicas.

bug has PR

Comentario más útil

Después de muchos intentos, encontré una manera de hacer que funcionen las tragamonedas dinámicas múltiples. Cuando agrego claves al elemento raíz de las plantillas de tragamonedas dinámicas, funciona:

esto no funciona: reproduce aquí

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

este trabajo: reproducir aquí

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

// work fine

¿Por qué necesito agregar claves para que funcione? Me perdí algo.

Todos 7 comentarios

La taquigrafía solo está disponible cuando se proporciona un argumento. Tratar de usar:
<template v-slot:[dynamicSlotName]> ... </template>

La taquigrafía solo está disponible cuando se proporciona un argumento. Tratar de usar:
<template v-slot:[dynamicSlotName]> ... </template>

Lo intenté antes de crear el problema y el resultado es el mismo 😞

¡Hola a todos!

¿Qué hay de nuevo en esto? Todavía tengo el problema en 2.6.11 reproducir aquí

Después de muchos intentos, encontré una manera de hacer que funcionen las tragamonedas dinámicas múltiples. Cuando agrego claves al elemento raíz de las plantillas de tragamonedas dinámicas, funciona:

esto no funciona: reproduce aquí

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

este trabajo: reproducir aquí

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

// work fine

¿Por qué necesito agregar claves para que funcione? Me perdí algo.

La solución de @ davis90 funcionó para mí. No entiendo por qué funciona también.

¿Por qué los errores son tan engañosos en vue. Gracias aunque tu solución funcionó

¿Fue útil esta página
0 / 5 - 0 calificaciones