【发布时间】:2017-05-28 05:28:42
【问题描述】:
我正在尝试构建一个树视图组件来比较输入以更改我的源 json。
绑定部分似乎工作正常,但分支上的隐藏/显示操作被破坏:
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”)会同时激活第一个和第三个分支...
我认为问题出在父组件上发生的点击,但我找不到修复代码的方法。
【问题讨论】:
标签: javascript vue-component vuejs2 vue.js