我想构建一个树视图组件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