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

  • 相关阅读:
    Sql2008 全文索引 简明教程
    sql server 全文检索 使用
    数据库分词查询的优缺点以及英文和中文各自的分词方法(一)
    win10中打开SQL Server配置管理器方法
    Asp.net 中高亮显示搜索关键字简单方法
    EntityFramework优缺点
    LoadXml载入Xhtml文件速度很慢
    c#无限循环线程如何正确退出
    线程的等待方法:join
    C#如何优雅的结束一个线程
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/10562161.html
Copyright © 2011-2022 走看看