我是VueJS的新手,我正在努力学习它。
我已经做了一个非常简单的工具提示,它应该出现时点击,关闭时再次点击。只需一个工具提示,就可以很好地处理一些非常基本的(初学者)代码。
<div v-if="toolTipContent.length > 0" class="c-tooltip">
<a @click="(clicked) ? clicked = false : clicked = true" class="c-tooltip--link">
{{ $label('toolTipLink') }}
</a>
<div v-html="toolTipContent" v-if="clicked" class="c-tooltip--content"></div>
</div>
在JS中
export default {
data() {
return {
clicked: false,
toolTipContent: global.content,
}
}
但现在我想要多个工具提示。我可以粗糙的是一个完整的新手,只是复制上面的,并改变属性和值,但这没有意义。
所以我尝试了这样的事情:
<div v-if="toolTipContent.length > 0" class="c-tooltip">
<a @click="toggleEl" class="c-tooltip--link">
{{ $label('toolTipLink') }}
</a>
<div v-html="toolTipContent" v-show="clicked" class="c-tooltip--content"></div>
</div>
在JS中,与上面相同,加上:
methods: {
toggleEl(e) {
e.target.nextSibling.classList.toggle("show");
}
},
但我被困在这里了。我的意思是,我可以在下一个兄弟节点上切换一个类(就像我在上面所做的那样),但这感觉就像Vue中的jQuery-way。所以我想我必须使用clicked
值,但如果我这样做,所有的工具提示都会显示(或隐藏)。我现在也在用v-show
,而我觉得v-if
应该更好。但是对于v-if
,我不能将内容作为目标,因为它不是DOM的一部分。
解决这个问题的建议是什么?
1条答案
按热度按时间zte4gxcn1#
最简单的方法是将所有的工具提示及其属性(点击、内容等)保存在Vue应用的
data()
部分。现在,您可以轻松地在模板部件中渲染所有这些工具提示。
注意上面我们是如何以动态的方式使用
tooltip
作为“当前元素”的。最后但同样重要的是,我们需要注意用于单击的
clickTooltip
方法。在脚本部分中将其分离到一个方法中会更加优雅和易读: