【问题标题】:vue.js: toggle method changing the value, but no behaviour is changed in viewvue.js:切换方法更改值,但视图中未更改任何行为
【发布时间】:2017-06-29 12:46:05
【问题描述】:

如果我单击列表之一(满足切换功能条件),那么它应该显示或不显示下拉菜单。到目前为止,方法 toggle 改变了 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>

【问题讨论】:

    标签: javascript css vue.js vuejs2


    【解决方案1】:

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

    methods: {
      toggle: function(dropDownName) {
        if (dropDownName === 'Meer') {
          this.dropDownOpen = !this.dropDownOpen
        }
        console.log(this.dropDownOpen)
        return this.dropDownOpen
      }
    

    查看warning 为什么不应该在方法中使用=&gt; 箭头函数

    在您的模板中添加这样的v-show 属性。

    <ul v-show="dropDownOpen" class="drop-down-menu">
    

    【讨论】:

      【解决方案2】:

      不知道确切,但这有效:

       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>
      

      【讨论】:

      • 这是因为我忘了提到v-show 属性。但是脚本应该可以工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多