意思就是
<li @click="show">
<span>1</span>
</li>
<li @click="show">
<span>1</span>
</li>
<li @click="show">
<span>1</span>
</li>
li点击只让当前的 li 下面的span 隐藏
意思就是
<li @click="show">
<span>1</span>
</li>
<li @click="show">
<span>1</span>
</li>
<li @click="show">
<span>1</span>
</li>
li点击只让当前的 li 下面的span 隐藏
定义好你的数据结构,然后操作数据就好了:
https://jsfiddle.net/ygjack/zq4hn28r/2/
<ul id="app">
<li v-for='item in items' @click="toggle(item)">
<span v-if='item.show'>{{item.content}}</span>
</li>
</ul>
new Vue({
el: '#app',
data: function() {
return {
items: [{
content: '1 item',
show: true
}, {
content: '2 item',
show: true
}, {
content: '3 item',
show: true
}]
}
},
methods: {
toggle: function(item) {
item.show = !item.show;
}
}
})
既然是v-for循环出来的,例如v-for="obj in objs",那就把这个obj传进每个li标签的show方法中,@click="show(obj)",这么做是可以实现的。另外,不知道题主要实现什么,从方法名来看好像是控制显隐,那就给每一个span一个v-show属性,然后在show方法中改变对应的v-show绑定的属性值,这样对每个单独的span肯定是没问题的,即使你操作span内容或是其他操作都是可以的。但是如果当前标签显示span,其他标签的span隐藏,因为这里涉及的其他标签,需要考虑的就多了。既然用vue了,多从数据的角度去思考,多看看尤大写的todoList example,官方文档要多看。手机敲代码不方便,只能说说大概的思路,见谅哈哈?
<div id="app">
<ul>
<li @click="show($event)">
<span>{{ a }}</span>
</li>
<li @click="show($event)">
<span>{{ b }}</span>
</li>
<li @click="show($event)">
<span>{{ c }}</span>
</li>
</ul>
</div>
<script>
new Vue({
el: '#app',
data: {
a: "12345a",
b: "12345bb",
c: "12345c"
},
methods: {
show: function(e){
e.currentTarget.querySelector("span").style.display = "none"
}
}
})
</script>
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
用vue就尽量遵从数据驱动的想法,实现这个的方法很多,但是尽量不要直接去操作dom。