【问题标题】:Vue.js Push doesn't update viewVue.js Push 不更新视图
【发布时间】:2018-11-17 22:57:58
【问题描述】:

我创建了一个数组,其中包含描述按钮信息的对象。在我的模板中,我有一个类 active 代表活动按钮。默认情况下,数组的第一个按钮是活动的。

模板:

<b-button-group class="page-buttons mt-2" size="sm">
   <b-button v-for="btn in buttons" 
      :key="btn.key" 
      @click="selectPage(btn.key)"
      v-bind:class="{'active': btn.active}">{{ btn.caption }}
   </b-button>
 </b-button-group>

脚本:

methods: {
    $createPaginationButtons: function(numberParameters) {
      const numberPages = Math.ceil(numberParameters / NUMBER_ELEMENT_PER_PAGE);
      this.buttons = [];

      for (let i = 0; i < numberPages; i++) {
        this.buttons.push({
          caption: `PAGE ${i + 1}`,
          active: (i === 0),
          key: (i + 1)
        });
      }

      Vue.set(this.buttons[0], 'active', true);
   }
}

按钮数组在数据中初始化为一个空数组。 当我的按钮数组更改时,视图会更新并显示正确数量的按钮,但不会触发我的类 active

你有什么想法吗?

【问题讨论】:

  • 您能否分享data 对象?以及何时或什么触发createPaginationButtons

标签: javascript vuejs2 vue-reactivity


【解决方案1】:

Push 是一个封装的方法,因此它会触发视图更新。

您是否在 data 属性上声明了按钮?

data() {
     buttons:[]
}

由于您将 active 属性创建为 i === 0,因此您不需要 Vue.set。

我不知道是否有事可做,但不要让按钮为空然后按下,而是使用 aux 变量创建数组,然后执行 this.buttons = auxVariable。这应该会触发更新。

【讨论】:

  • 是的,我已经像您的代码一样在数据属性中声明了buttons。我不明白什么是辅助变量?
  • 我的意思是将数组推入另一个变量,一个函数的局部变量,然后将这个新变量的值赋给buttons变量。
  • 我也尝试了这个选项,但结果相同,它不会更新我的视图:/
  • 嗯,你检查过数组是否包含什么吗?真奇怪。也许循环没有迭代,然后视图没有更新,因为数组是空的。
  • 不是一切都是正确的,我也不明白为什么。我的数组包含正确的值,视图已更新并显示正确数量的按钮,但我的课程 active 没有被触发
猜你喜欢
  • 2017-11-11
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多