如果我点击列表中的一个(满足切换功能条件),那么它应该显示或不显示下拉菜单。到目前为止,切换方法在chrome控制台中更改了dropDownOpen的值,但视图中没有显示任何更改,代码如下:
控制台显示值正在更改,但在模板中不会更改!
<ul>
<li v-for="(navHeading, index) in headerMenuItems" @click="toggle(navHeading.name)" :class="{'open': dropDownOpen}">
<icon :glyph="navMenuIconNames[index]" :viewBox="navMenuIconNames[index].viewBox" :height="25" :width="50"></icon>
<a class="navigation-title" href="#">{{ navHeading.name }}</a>
<ul class="drop-down-menu">
<li v-for="dropDownMenuItem in navHeading.children">
<a class="drop-down-menu-item-title">{{ dropDownMenuItem.name }}</a>
</li>
</ul>
</li>
</ul>脚本:
data() {
const dropDownOpen = false
return { dropDownOpen }
},
methods: {
toggle: (dropDownName) => {
if (dropDownName === 'Meer') {
this.dropDownOpen = !this.dropDownOpen
}
console.log(this.dropDownOpen)
return this.dropDownOpen
}
}CSS:
<style scoped>
.open .drop-down-menu {
display: block;
background-color: tomato;
}
.drop-down-menu {
display: none;
}
</style>发布于 2017-06-29 21:02:34
方法中的this没有指向vue实例,因此请使用普通函数而不是胖箭头函数
methods: {
toggle: function(dropDownName) {
if (dropDownName === 'Meer') {
this.dropDownOpen = !this.dropDownOpen
}
console.log(this.dropDownOpen)
return this.dropDownOpen
}请参见不应将=>箭头函数与方法一起使用的原因warning
在模板中添加v-show属性,如下所示。
<ul v-show="dropDownOpen" class="drop-down-menu">发布于 2017-06-29 21:40:12
不知道确切地说,但这是有效的:
methods: {
toggle(dropDownName) {
if (dropDownName === 'Meer') {
this.dropDownOpen = !this.dropDownOpen
}
return this.dropDownOpen
}
},和模板:
<ul>
<li v-for="(navHeading, index) in headerMenuItems" @click="toggle(navHeading.name)">
<icon :glyph="navMenuIconNames[index]" :viewBox="navMenuIconNames[index].viewBox" :height="25" :width="50"></icon>
<span>{{ dropDownOpen }}</span>
<a class="navigation-title" href="#">{{ navHeading.name }}</a>
<ul v-show="dropDownOpen" class="drop-down-menu">
<li v-for="dropDownMenuItem in navHeading.children">
<a class="drop-down-menu-item-title">{{ dropDownMenuItem.name }}</a>
</li>
</ul>
</li>
</ul>https://stackoverflow.com/questions/44825542
复制相似问题