vue给data的属性赋值时,有时不会响应式更新到视图。

发布于 2022-09-06 11:30:34 字数 1328 浏览 28 评论 0

当只修改data.list数组的值时,控制台打印数据已更新,但是视图不更新。
如果家还是那个一条修改name属性的值时。又可以了。

不知是什么原因,求教!

// this.data.name = 'web...'
this.data.list[0] = 'aaa';
this.data.list[1] = 'bbb';
this.data.list[2] = '333333';

clipboard.png

this.data.name = 'web...'
this.data.list[0] = 'aaa';
this.data.list[1] = 'bbb';
this.data.list[2] = '333333';

clipboard.png

test.vue

<template>
  <div class="v-set-wrap">
    <span class="set-item">{{data.name}}, {{data.list}}</span>
    <button @click="changeData">changeData</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: {
        name: 'vue',
        list: [1, 2, 3]
      }
    };
  },
  methods:{
    changeData(){
        // this.data.name = 'web...'; // 不修改name属性值时,视图不会更新
        this.data.list[0] = 'aaa';
        this.data.list[1] = 'bbb';
        this.data.list[2] = '333333';
        console.log(this.data);
    }
  },
  mounted(){}
};
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

待"谢繁草 2022-09-13 11:30:34

你这样直接对数组操作是不会触发dom的更新的,更改了name之后可以更新,是因为更改name可以触发dom更新,所以数组的值也能更新,要操作数组有两种方法:
1.this.$set(this.data.list, 0,'aaaa')
2.this.data.list.splice(0, 1,'aaaa')

https://cn.vuejs.org/v2/guide...

神也荒唐 2022-09-13 11:30:34

name是值,'list'是数组,数组操作除非是pushsplice这些增删操作的时候,才会更新到视图。
对对象、数组操作,这里你需要用this.$set(arr,idx,data)方法

this.$set(this.list,0,'aaa');
this.$set(this.list,1,'bbb');
this.$set(this.list,2,'333333');

$set参考

泅人 2022-09-13 11:30:34

vue只监听了数组的splice,push,unshift等方法
你可以用set来修改

濫情▎り 2022-09-13 11:30:34

请使用this.$set()来操作。

痞味浪人 2022-09-13 11:30:34

我觉得这是vue的一个bug!
既然数据都更新了,视图没更新。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文