【问题标题】:Vue.js .$set is not a functionVue.js .$set 不是函数
【发布时间】:2017-10-19 01:02:58
【问题描述】:

我正在尝试使用$set 函数修改存储在 vuejs 中的数据。但是我收到了这个错误:TypeError: app.messageBox.$set is not a function.

这是关于我如何定义 app 和 messageBox 的代码:

app = new Vue({
    el: '#app',
    data: {
        messageBox: [{
            id: 1,
            message: 'first'
        }, {
            id: 2,
            message: 'second'
        }]
    }
});

在另一个js文件中,我尝试修改messageBox中的数据:

function test() {
    app.messageBox.$set(0, {message: 'aaa'});
}

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    正确的语法是Vue.set(target, index, value)。 在组件代码或single-file-components 中使用时,可以使用等效别名:this.$set(target, index, value):

    Vue.set(app.messageBox, 0, { message: 'outside component' });
    
    // or when you don't access to `Vue`:
    app.$set(app.messageBox, 0, { message: 'outside component' });
    
    // or when `this` is the Vue instance:
    this.$set(this.messageBox, 0, { message: 'inside component' })
    

    const app = new Vue({
      el: '#app',
      data() {
        return {
          messageBox: [{
            id: 1,
            message: 'first'
          }, {
            id: 2,
            message: 'second'
          }]
        };
      },
      mounted() {
        setTimeout(() => {
          this.$set(this.messageBox, 0, { message: 'inside component' })
        }, 1000)
      }
    });
    
    setTimeout(() => {
      Vue.set(app.messageBox, 0, { message: 'outside component' });
    }, 2000);
    <script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script>
    
    <div id="app">
      <p v-for="msgBox of messageBox">{{msgBox.message}}</p>
    </div>

    【讨论】:

      【解决方案2】:

      此示例用于更新数组 car 中的产品数量:

       const indice = this.car.findIndex((pr) => pr.id === product.id);
                          if(indice===-1){
                              product.qty = 1
                              this.car.push(product)
                          }else{
                              //Vue no detectara cambios en el array si se actualiza por indice https://stackoverflow.com/a/59289650/16988223
                              //this.car[indice].qty++
                              const productUpdated = product 
                              productUpdated.qty++
                              this.$set(this.car, indice, productUpdated)
                          }
      

      【讨论】:

        猜你喜欢
        • 2017-06-25
        • 2020-10-06
        • 1970-01-01
        • 2023-02-23
        • 2019-03-17
        • 1970-01-01
        • 2016-08-30
        • 1970-01-01
        • 2017-11-19
        相关资源
        最近更新 更多