zoukankan      html  css  js  c++  java
  • Vue之this.$set的使用——响应式添加对象属性

    this.$set说明

    语法

    Vue.set( target, propertyName/index, value )

    参数

    参数 类型 说明
    taget Object | Array 需要添加或修改属性的目标对象
    propertyName/index string | number 属性名称或索引
    value
    any 设定的值

    用法

    向响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新 property,因为 Vue 无法探测普通的新增 property (比如  this.myObject.newProperty = 'hi' )

    注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象。

    为什么要使用this.$set

    举一个例子,我们用常规方法直接为对象添加属性。

    1 <template >
    2     <view class="flex flex-direction bg-white">
    3         <view>姓名:{{ student.name }}</view>
    4         <view>年龄:{{ student.age }}</view>
    5         <button class="cu-btn bg-blue" @click="addProperty">添加年龄属性</button>
    6     </view>
    7 </template>
     1 export
     2 default {
     3         data() {
     4             return {
     5                 student:
     6                 {
     7                     name:
     8                     '张三',
     9                 }
    10             }
    11         },
    12         methods: {
    13             addProperty: function(e) {
    14                 this.student.age = 15;
    15                 console.log("student=>", this.student);
    16             }
    17         }
    18     }

    点击按钮时,我们发现年龄属性:添加了,但没有完全添加。——数据中已经有了“age”属性,但视图层没有显示出来。

    视图层为什么没有添加的属性?

    由于受JavaScript的限制,vue.js不能监听对象属性的添加和删除,因为在vue组件初始化的过程中,会调用getter和setter方法,所以该属性必须是存在在data中,视图层才会响应该数据的变化。

    如何解决?

    解决的其中一种方法,就是使用 $set 。我们将 addProperty 进行修改。

    1 addProperty: function(e) {
    2     this.$set(this.student, "age", 15) console.log("student=>", this.student);
    3 }

    结果,无论是数据还是视图层,都符合了我们的预期。

    参考网址

    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    ojdbc14.jar
    Redis
    ftl转成word
    Swagger
    SpringBoot
    条件注解
    Spring SpringMVC MyBatis
    Spring介绍
    Django_mysql表查询
    Django01
  • 原文地址:https://www.cnblogs.com/luyj00436/p/15162415.html
Copyright © 2011-2022 走看看