使用vue遇到的bug

Vue数据更新UI不刷新显示  Vue.set( target, key, value )

vue比较常见的坑就是数据(后台返回)更新了,但是UI界面并没有更新,常见于以下情况:

一.数据为数组时

1.通过数组索引修改数组元素例如:

export default{

    data(){

        return{

                    arr:[

                            {

                                   a:1,

                                   b:2,

                                   c:3

                            }

                        ]

    }

},

methods:{

        update(){

            this.arr[0].a=4;

        } 

 }

}

此时ui数据并不会刷新。

2.修改数组长度时:

export default{

            data(){

                    return{

                                arr:[

                                        {a:1,

                                         b:2,

                                         c:3

                                        }

                                ]

               }

},

methods:{

             update(){

                        this.arr.length=4;

            }

}

}

解决方案:

export default{

            data(){

                return{

                        arr:[1,2,3]

                }

  },

methods:{

        update(){

                this.$set(this.arr,0,'a')

       }

}

}

如果data为JSON数组则:

export default{

            data(){

                return{

                        arr:[{a:1},{a:2},{a:3}]

                    }

},

        methods:{

                update(){

                        var item=this.arr[0];

                        this.$set(item,' a ' , '  ss ');

                }

}

}

第一个参数为要更新数据的数组,第二个参数为要更新的数组中具体的元素下标,第三个参数为新数据。

二、数据为对象时:

Vue 不能检测对象属性的添加或删除:你可以这样添加一个属性

export default{

            data(){

                return{

                        obj:{a:1}

                    }

},

        methods:{

                update(){

                        this.$set(this.obj , ' b ' , '  2 ');

                }

    }

}

如果要添加多个属性:

export default{

            data(){

                return{

                        arr:[{a:1},{a:2},{a:3}]

                    }

},

        methods:{

                update(){

                        this.obj(Object.asign({},this.obj,{

                            a:2,

                            b:3,

                            c:4                            

                        })

                );

      }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,545评论 0 13
  • ## 经典bug:1.模板引擎的渲染## 难点:### 0.vue总结#### 指令:```jsVue.direc...
    x_ng阅读 312评论 0 0
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 3,018评论 1 4
  • 面试官:谈谈你们项目当中的前端代码规范吧? 自己先想一分钟。 前面的话 有些同学在开发某个新功能时根据需求就哐哐哐...
    880d91446f17阅读 1,027评论 0 1
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,088评论 0 29