【发布时间】:2020-03-12 12:50:23
【问题描述】:
我有树组件,比如默认的 Vue 树视图示例。 我想在单击树项时切换活动类。但是当我点击时,每个元素都有活动类:(我不明白我做错了什么。在非递归组件中工作正常。请帮忙。
这是我的代码:
new Vue({
el: '#groups',
data: {
hasLoaded: true,
treeData: [
{
"uuid": 1,
"name": "Group1",
"children": [
{
"uuid": 2,
"name": "Group2"
},
{
"uuid": 3,
"name": "Group3"
}
]
},
{
"uuid": 4,
"name": "Group4",
"children": [
{
"uuid": 5,
"name": "Group5",
"children": [
{
"uuid": 7,
"name": "Group7"
}
]
}
]
},
{
"uuid": 6,
"name": "Group6"
}
]
}
});
我的物品模板:
<script type="text/x-template" id="item-template">
<li class="list-group-item group-item">
<div
:class="{bold: isFolder, active : isActiveItem}"
@click="selectGroup"
>
{{ item.name }}
<span v-if="isFolder" @click="toggle">[{{ isOpen ? '-' : '+' }}]</span>
</div>
<ul v-show="isOpen" v-if="isFolder" class="list-group">
<tree
class="item"
v-for="(child, index) in item.children"
:key="index"
:item="child"
></tree>
</ul>
</li>
</script>
<div id="groups">
<ul id="demo" class="list-group">
<tree
v-for="(item, index) in treeData"
class="item"
:item="item"
:key="index"
></tree>
</ul>
</div>
和组件
Vue.component('tree', {
template: '#item-template',
props: {
item: Object
},
data: function () {
return {
isOpen: false,
isItemActive: false,
currentItem: null
}
},
computed: {
isFolder: function () {
return this.item.children && this.item.children.length
},
isActiveItem: function () {
return this.currentItem === this.item.uuid;
}
},
methods: {
toggle: function () {
if (this.isFolder) {
this.isOpen = !this.isOpen
}
},
selectGroup: function () {
this.currentItem = this.item.uuid;
}
}
});
【问题讨论】:
-
我尝试运行您的代码,一切似乎都可以正常工作。当我单击一个节点时,该节点被选中。也许您可以明确说明您想要什么行为?您想单击一个节点两次以取消选择它吗?是否要单击一个节点以取消选择任何先前的选择(这样一次只能选择一个节点)?
-
"您是否要单击一个节点以取消选择任何先前的选择(这样一次只能选择一个节点)?" - 是的
标签: vue.js vuejs2 vue-component