vue single library example component cli javascript vue.js vuejs2 vue-component

javascript - single - ¿Es posible pasar un componente como accesorios y usarlo en un componente infantil en Vue?



vue sync (2)

En una aplicación Vue 2.0, digamos que tenemos los componentes A, B y C.

A declara, registra y usa B

¿Es posible pasar C de A a B?

Algo como esto:

<template> <div class="A"> <B :child_component="C" /> </div> </template>

Y usa C en B de alguna manera.

<template> <div class="B"> <C>Something else</C> </div> </template>

La motivación: quiero crear un componente genérico B que se usa en A pero que recibe de A su hijo C En realidad, A usará B varias veces para pasarle diferentes ''C''.

Si este enfoque no es correcto, ¿cuál es la forma correcta de hacerlo en Vue?

Respondiendo @Saurabh

En lugar de pasar como accesorios, probé la sugerencia dentro de B.

<!-- this is where I Call the dynamic component in B --> <component :is="child_component"></component> //this is what I did in B js components: { equip: Equipment }, data () { return { child_component: ''equip'', _list: [] } }

Básicamente estoy tratando de renderizar el Equipo, pero de una manera dinámica

Obtengo 3 errores en la consola y una página en blanco

[Vue warn]: Error al procesar el componente en /home/victor/projetos/tokaai/public/src/components/EquipmentFormItem.vue:

Unkeught TypeError: no se puede leer la propiedad ''nombre'' de indefinido

TypeError: no se puede leer la propiedad ''setAttribute'' de undefined

Aparentemente estoy haciendo algo mal


Puedes usar un atributo especial para hacer este tipo de cosas. El ejemplo del componente dinámico y su uso se puede encontrar aquí .

Puede usar el mismo punto de montaje y cambiar dinámicamente entre múltiples componentes usando el elemento reservado y enlazar dinámicamente a su atributo is:

Su código se verá como sigue:

<template> <div class="B"> <component :is="child_component"> Something else</component> </div> </template>


Resumiendo:

<!-- Component A --> <template> <div class="A"> <B> <component :is="child_component"></component> </B> </div> </template> <script> import B from ''./B.vue''; import Equipment from ''./Equipment.vue''; export default { name: ''A'', components: { B, Equipment }, data() { return { child_component: ''equipment'' }; } }; </script> <!-- Component B --> <template> <div class="B"> <h1>Some content</h1> <slot></slot> <!-- Component C will appear here --> </div> </template>