У меня есть компонент parent
, который охватывает несколько компонентов child
. Я хочу, чтобы родительский компонент управлял состоянием всех своих дочерних элементов. Когда ребенок нажат, я хочу, чтобы родитель знал, и я хочу обновить всех своих братьев и сестер, чтобы они знали, какой из них активен.
Vue.component('child', {
template: '#childtemplate',
props: ['index', 'activeIndex'],
methods: {
updateActiveIndex: function() {
console.log("emitting");
this.$emit('updateEvent', this.index);
}
}
});
Vue.component('parent', {
data: function() {
return {
activeIndex: 0
}
},
render: function(createElement) {
console.log("rendering ai->", this.activeIndex);
this.$options._renderChildren.forEach(function(item, index) {
if (item.data === undefined)
return;
item.componentOptions.propsData = {
index: index,
activeIndex: this.activeIndex
}
}.bind(this));
return createElement('div', {}, this.$options._renderChildren);
},
methods: {
handleToggle: function(index) {
this.activeIndex = index;
}
},
created: function() {
this.$on('updateEvent', this.handleToggle);
//try manually update it, but the children don't update.
setTimeout(function(){this.activeIndex = 6}.bind(this), 3000);
}
});
new Vue({
el: '#app'
})
Я попытался добавить параметр прослушивателя событий в функцию createElement в parent
render()
следующим образом:
return createElement('div', {on:{updateEvent: this.handleToggle}}, this.$options._renderChildren);
Я попытался установить прослушиватель $on
в созданной функции parent
. Но это не запускается.
Я попытался вручную обновить activeIndex
с тайм-аутом, который обновляет его в корне, но дочерние элементы не обновляются.
Хакское решение, и единственное, что я нашел работающим, это ссылка на обратный вызов $parent
непосредственно из дочернего элемента, передающего индекс, затем в родительском цикле через дочерние элементы и назначение свойства вручную. Это вызывает ошибки предупреждения vue, но выполняет свою работу.
Есть ли лучший способ?
child
компонентами. - person Kiee   schedule 13.03.2017props
. Это будет работать в интерактивном режиме. Если вы все еще хотите отслеживать состояние каждого дочернего элемента самостоятельно, используйте общедоступныйpubsub
подход. - person Codebryo   schedule 14.03.2017props
передpropsData
, и вchild
компонентах никакие реквизиты не подхватывались. См.: stackoverflow.com/questions/42764535/ - person Kiee   schedule 14.03.2017