我想構建一個樹視圖組件comporting輸入以改變我的源json。樹視圖嵌套輸入與VueJS
結合部似乎很好地工作,但在樹枝隱藏/顯示動作被打破:
HTML:
<div id="app">
<tree :data="json" :link="json"></tree>
<p>Outside component :</p>
<pre>{{json}}</pre>
</div>
JS:
let json = {
nodeA: {
nodeA1 : "valueA1",
nodeA2 : "valueA2"
},
nodeB: "valueB",
nodeC: {
nodeC1 : "valueC1",
nodeC2 : "valueC2"
}
};
Vue.component('tree', {
name: 'treeview',
props: [
'data',
'link'
],
template: `<ul>
<li v-for="(val, key) in data">
<input type="text" v-if="isLeaf(val)" v-model=link[key]>
<span @click="toggle">{{key}}</span>
<tree v-if="!isLeaf(val)" v-show="show" :data="val" :link="link[key]">
</tree>
</li>
</ul>`,
data: function() {
return {
show: false
};
},
methods: {
isLeaf: function(node) {
return typeof node != 'object';
},
toggle: function() {
this.show = !this.show;
}
}
});
new Vue({
el: '#app',
data: {
json: json
}
});
https://codepen.io/anon/pen/EZKBwL
由於你可以看到,點擊第一個分支(「nodeA」)激活這兩個第一個和第三個分支...
我認爲問題來自父組件上發生的點擊,但我找不到修復我的代碼的方法。
簡單但高效:)另外,是th使用源JSON綁定嵌套輸入的一個更好的解決方案,而不是將鏈接作爲通道傳遞? – Pourpre
@Pourpre如果你問道具的替代品,你可以使用vuex如果它適合你的要求,你可以看[文檔](https://vuex.vuejs.org/en/)或我的回答[這裏]( HTTP://計算器。com/a/40830610/1610034)或[here](http://stackoverflow.com/questions/40953496/vue-shared-data-between-different-pages/40955110#40955110)。 – Saurabh