Динамическое перемещение реквизита динамического компонента в VueJS
У меня динамический вид:
<div id="myview">
<div :is="currentComponent"></div>
</div>
с соответствующим экземпляром Vue:
new Vue ({
data: function () {
return {
currentComponent: 'myComponent',
}
},
}).$mount('#myview');
Это позволяет мне динамически менять свой компонент.
В моем случае у меня есть три разных компонента: myComponent
, myComponent1
и myComponent2
. И я переключаюсь между ними следующим образом:
Vue.component('myComponent', {
template: "<button @click=\"$parent.currentComponent = 'myComponent1'\"></button>"
}
Теперь я хотел бы передать реквизит на myComponent1
.
Как передать эти реквизиты, когда я меняю тип компонента на myComponent1
?
Ответы
Ответ 1
Чтобы динамически передавать реквизиты, вы можете добавить директиву v-bind
к вашему динамическому компоненту и передать объект, содержащий ваши имена и значения prop:
Таким образом, ваш динамический компонент будет выглядеть так:
<component :is="currentComponent" v-bind="currentProperties"></component>
И в вашем экземпляре Vue currentProperties
может измениться на основе текущего компонента:
data: function () {
return {
currentComponent: 'myComponent',
}
},
computed: {
currentProperties: function() {
if (this.currentComponent === 'myComponent') {
return { foo: 'bar' }
}
}
}
Итак, теперь, когда currentComponent
является myComponent
, он будет иметь свойство foo
равное 'bar'
. И когда это не так, никаких свойств не будет.
Ответ 2
Если вы импортировали код через require
var patientDetailsEdit = require('../patient-profile/patient-profile-personal-details-edit')
Ответ 3
Вы также можете обойтись без вычисляемого свойства и встроенного объекта.
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
Показано в документах на V-Bind - https://vuejs.org/v2/api/#v-bind