首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vue.js:切换更改值的方法,但视图中未更改任何行为

vue.js:切换更改值的方法,但视图中未更改任何行为
EN

Stack Overflow用户
提问于 2017-06-29 20:46:05
回答 2查看 1K关注 0票数 0

如果我点击列表中的一个(满足切换功能条件),那么它应该显示或不显示下拉菜单。到目前为止,切换方法在chrome控制台中更改了dropDownOpen的值,但视图中没有显示任何更改,代码如下:

控制台显示值正在更改,但在模板中不会更改!

代码语言:javascript
复制
 <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>

脚本:

代码语言:javascript
复制
 data() {

      const dropDownOpen = false
      return { dropDownOpen }
    },
methods: {
      toggle: (dropDownName) => {
        if (dropDownName === 'Meer') {
          this.dropDownOpen = !this.dropDownOpen
        }
        console.log(this.dropDownOpen)
        return this.dropDownOpen
      }
    }

CSS:

代码语言:javascript
复制
<style scoped>
  .open .drop-down-menu {
    display: block;
    background-color: tomato;
  }

  .drop-down-menu {
    display: none;
  }
</style>
EN

回答 2

Stack Overflow用户

发布于 2017-06-29 21:02:34

方法中的this没有指向vue实例,因此请使用普通函数而不是胖箭头函数

代码语言:javascript
复制
methods: {
  toggle: function(dropDownName) {
    if (dropDownName === 'Meer') {
      this.dropDownOpen = !this.dropDownOpen
    }
    console.log(this.dropDownOpen)
    return this.dropDownOpen
  }

请参见不应将=>箭头函数与方法一起使用的原因warning

在模板中添加v-show属性,如下所示。

代码语言:javascript
复制
<ul v-show="dropDownOpen" class="drop-down-menu">
票数 2
EN

Stack Overflow用户

发布于 2017-06-29 21:40:12

不知道确切地说,但这是有效的:

代码语言:javascript
复制
 methods: {
      toggle(dropDownName) {
        if (dropDownName === 'Meer') {
          this.dropDownOpen = !this.dropDownOpen
        }
        return this.dropDownOpen
      }
    },

和模板:

代码语言:javascript
复制
 <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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44825542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档