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 属性是无效的。

  • 相关阅读:
    便携版Mysql安装
    Markdown 语法学习
    布局页中的特殊情况(比如说只有某页有的banner)
    Jsp Layout 布局页
    eclipse变量名自动补全
    java中的final关键字(2013-10-11-163 写的日志迁移
    java的重载(overload) (2013-10-11-163 写的日志迁移
    java 的多态(2013-10-11-163 写的日志迁移
    java中类与对象的概念(2013-05-04-bd 写的日志迁移
    java的一些相关介绍(2013-10-07-163 写的日志迁移
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/10562161.html
Copyright © 2011-2022 走看看