【发布时间】:2019-09-21 23:11:41
【问题描述】:
我是 vuejs 的新手,这就是我想做的: 我有一个组件列表,每个组件都在一个 div 中。现在,如果我对组件做某事(即单击它)。我想向父 div 添加一个类。这是我到目前为止所做的,代码被简化了,只是为了展示我想用一个简单的案例来做什么。
我的 app.vue:
<div class="toggle-box" v-for="(name, index) in names" :class="classActive" :key="index">
<app-comp :myName="name" :myIndex="index" @someEvent="doSomething"></app-counter>
</div>
data() {
classActive: '',
names: ['alpha', 'beta', 'gamma']
},
methods: {
doSomething() {
this.classActive === '' ? this.classActive = 'is-active': this.classActive='';
}
}
组件:
<div>
<button @click="toggle">{{ myName }} - {{ myIndex }}</button>
</div>
props: ['myName', 'myIndex'],
methods: {
toggle() {
this.$emit('someEvent', index);
}
}
这是做什么的:它创建了 3 个带有“toggle-box”类的 div,其中有一个标签为“name - index”的按钮。当我单击一个按钮时,它会发出带有索引的“someEvent”事件。父级侦听此事件并使用“toggle-box”类在 div 上切换“is-active”类。问题是,现在,当我单击一个按钮时,它会将类添加到所有 3 个 div。可能是因为 vuejs 的 3 个 div 之间没有区别。我知道我可以将索引附加到事件并在父级中使用 $event 调用它,但是我该如何使用它呢?还是有更好的方法来实现我想要的?
感谢您的帮助。
【问题讨论】:
-
不知道为什么要把
classActive设置为应用程序的属性,而不是组件。 -
什么意思?我知道这可能不是最好的方法,请随时更改:-)