Tengo una vista dinámica:
<div id="myview">
<div :is="currentComponent"></div>
</div>
con una instancia de Vue asociada:
new Vue ({
data: function () {
return {
currentComponent: 'myComponent',
}
},
}).$mount('#myview');
Esto me permite cambiar mi componente de forma dinámica.
En mi caso, tengo tres componentes diferentes: myComponent
, myComponent1
, y myComponent2
. Y cambio entre ellos así:
Vue.component('myComponent', {
template: "<button @click=\"$parent.currentComponent = 'myComponent1'\"></button>"
}
Ahora, me gustaría pasarle accesorios myComponent1
.
¿Cómo puedo pasar estos accesorios cuando cambio el tipo de componente a myComponent1
?
javascript
vue.js
vuejs2
vue-component
Epitouille
fuente
fuente
propName="propValue"
. ¿Esa es tu pregunta?<myComponent1 propName="propValue">
, cambio el componente mediante programación con$parent.currentComponent = componentName
<div :is="currentComponent"></div>
. Ahí es donde agregarías el atributo.myComponent1
toma accesorios ymyComponent2
no acepta accesoriosRespuestas:
Para pasar props dinámicamente, puede agregar la
v-bind
directiva a su componente dinámico y pasar un objeto que contenga sus nombres y valores de prop:Entonces, su componente dinámico se vería así:
Y en su instancia de Vue,
currentProperties
puede cambiar según el componente actual:Así que ahora, cuando
currentComponent
seamyComponent
, tendrá unafoo
propiedad igual a'bar'
. Y cuando no lo sea, no se transferirán propiedades.fuente
<component>(here)</component>
. ¿Es eso posible?<slot>
para cada componente que está renderizando dinámicamente. vuejs.org/v2/guide/components-slots.htmlTambién puede prescindir de la propiedad calculada e insertar el objeto en línea.
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
Se muestra en los documentos de V-Bind: https://vuejs.org/v2/api/#v-bind
fuente
Podrías construirlo como ...
fuente
Si ha importado su código a través de require
también puede hacer referencia al componente a través de la propiedad name si su componente lo tiene asignado
fuente