コンポーネントをラップするparent
コンポーネントがあります。私は、親コンポーネントにすべての子の状態を管理させたい。子供がクリックされると、私は親が知りたいと思うので、どの兄弟がアクティブであるかを知るように、すべての兄弟を更新したい。親データが変更されると、VueJS子コンポーネントは更新されません
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'
})
私はそうのようなparent
render()
でのcreateElement関数にイベントリスナーオプションを追加しようとしている:
return createElement('div', {on:{updateEvent: this.handleToggle}}, this.$options._renderChildren);
私はparent
作成機能で$on
リスナーを設定しようとしています。しかし、これは引き起こされません。
私はactiveIndex
を手動で更新しようとしましたが、タイムアウトはルート上で更新されますが、子は更新されません。
ハックソリューションと私は仕事に見つけた唯一のことは、親に子供をループして、手動で小道具を割り当て、インデックスを渡し、子から直接$parent
コールバックを参照することです。これにより、vueはエラーを警告しますが、ジョブは完了します。
良い方法はありますか?
このスレッドには、あなたが探しているものがあります(小道具、店舗、またはVuex経由)。選ばれた答えは小道具を使っていた:http://stackoverflow.com/a/41923080/1695318 – iamjpg
あなたは子供たちが何であるか知っていますか?あなたが知っているように、彼らは "子供"のコンポーネントですか? – Bert
はい@BertEvans、それらは '子 'コンポーネントになります。 – Kiee