在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去; 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。 如下代码,给 student对象新增 age 属性

    1. data () {
    2. return {
    3. student: {
    4. name: '',
    5. gender: ''
    6. }
    7. }
    8. },
    9. mounted () { // ——钩子函数,实例挂载之后
    10. this.student.age = 24
    11. }

    受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。
    因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。
    正确写法:this.$set(this.data,”key”,value’)

    1. mounted () {
    2. this.$set(this.student,"age", 24)
    3. }


    我们发现set函数接收三个参数分别为 target、key、val,其中target的值为数组或者对象,这正好和官网给出的调用Vue.set()方法时传入的参数参数对应上。

    image.png
    image.png