zoukankan      html  css  js  c++  java
  • VUE 动态给对象增加属性,并触发视图更新。

    在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。

    根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。

    Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property)。然而它可以使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上。

    我们编写如下代码测试给一个对象动态添加属性:

    <div id="app">
        <input v-model="form.amount" /> 
        <input type="button" @click="demoSet()" value="setName">
    </div>
    <script type="text/javascript">
    var vm=new Vue({
        el: "#app",
        data: {
            i:0,
            form:{}
        },
        methods:{
            demoSet(){
                this.form.amount=this.i++;
                //this.$set(this.form,"amount",this.i++);
            }
        }
       });
    </script>

    这种方式可以给form增加一个属性,但是不会界面不会响应更新。

    正确的做法:

    <div id="app">
        <input v-model="form.amount" /> 
        <input type="button" @click="demoSet()" value="setName">
    </div>
    <script type="text/javascript">
    var vm=new Vue({
        el: "#app",
        data: {
            i:0,
            form:{}
        },
        methods:{
            demoSet(){
                this.$set(this.form,"amount",this.i++);
            }
        }
       });
    </script>

    这样就可以给对象添加amount 属性了。

    这个有什么应用场景呢,比如 data.form 属性很多,其中大部分是不需要要的,这时候,可以使用这种方法实现动态添加需要的属性。

    需要注意的是,这种方式是不能给根数据添加属性的,比如:

    <div id="app">
        <input v-model="name" /> 
        <input type="button" @click="demoSet()" value="setName">
    </div>
    <script type="text/javascript">
    var vm=new Vue({
        el: "#app",
        data: {
            
        },
        methods:{
            demoSet(){
                this.$set(this,"name","ray");
            }
        }
       });
    </script>

    这种方式给data 增加一个 name 属性是无效的。

  • 相关阅读:
    Ubuntu 截图工具Flameshot
    django 执行原生的sql
    tensorflow学习笔记(3)前置数学知识
    tensorflow学习笔记(2)-反向传播
    tensorflow学习笔记(1)-基本语法和前向传播
    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识
    数据结构-查找-散列表的线性探测已经拉链法的查找
    数据结构-查找-折半查找-二叉排序树查找
    数据结构-查找-线性表查找技术
    数据结构-排序-直接插入排序
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/10562161.html
Copyright © 2011-2022 走看看