Vue计算属性的setter和getter

217 阅读1分钟

举个例子

<body>
    <div id="app">{{fullname}}</div>
    
    <script type="text/javascript">
        var vm = new Vue({
        el:"#app",
        data:{
            firstname:"jack",
            lastname:"lee",
            },
        computed:{	        //计算属性,数据不变仅计算一次
            fullname:function(){
                return this.firstname + " " + this.lastname
            }
        })
    </script>
</body>

get

这里get的作用就是,当 fullname 对象被调用时,触发 get 函数

computed:{				//计算属性
        fullname:{
            get:function(){
                return this.firstname + " " + this.lastname
            }
        }
}

set

当对象被设置或修改时触发

computed:{				//计算属性
        fullname:{
            get:function(){
                return this.firstname + " " + this.lastname
            },
            set:function(value){
                return console.log(value)
            }
        }
}

当我们对对象fullname进行修改时

控制台输入修改时,打印出参数 value

设计一个修改后渲染到视图的set函数:

set:function(value){
    var arr = value.split(" ");
    this.firstname=arr[0];
    this.lastname=arr[1];
}

以上程序意为,将输出参数通过split方法打散成数组,再将数组赋值给本实例的firstnamelastname

那么为什么会重新渲染呢?

这里引申出 get 函数的工作原理:当 get 函数依附的值 (this.firstname) 变化时重新渲染。

此外,set方法还可以直接添加对象的属性:

观看下面的代码

<div id="app">
    <div v-for= "(item,key) of userinfo">
        {{item}}---{{key}}
    </div>
</div>

<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            userinfo:{
                    name:"dell",
                    age:28,
                    gender:"male"
		    }
	}
    })
</script>

效果如下:

如果我们想在userinfo中添加一个新属性,使用set操作即可

语法:vue.set(修改位置,“修改的属性”,“修改的属性值”)

还有一种语法能达到同样的效果:vm.$set(修改位置,修改的属性,修改的属性值)

set方法还可以用于修改数组,当对象userinfo编程一个数组:[1,2,3,4]

语法: Vue.set(修改位置,修改的属性,修改的属性值)

vm.$set的修改效果与上面修改对象同理