vue之计算属性和侦听器
程序员文章站
2022-05-17 07:57:30
...
计算属性和侦听器
为什么需要计算属性,在Vue的模板解析其实有相当多的不便,只能解析挂载到vm的属性,这些东西要吗是data通过代理实现,但是如果需要对数据进行复杂的处理,那么在模板语法用javascript是非常不便的。
如果你学过react你就知道,其实计算属性相当于在rander函数内定义的变量,这个变量也是通过表达式计算的结果,可能包括state的属性,每次渲染(调用rander函数)的时候都肯定会重新计算其中的值。这其实也在一方面说明了为什么侦听属性和方法会有缓存的区别。
说了这么多那,写一个计算属性:
export default {
data() {
return {name: 'zix'}
},
computed: {
//定义一个计算属性
reversedName() {
return this.name.split('').reserse().join('')
}
},
//使用
template: `<div>
name: {{name}} => reversedName: {{reversedName}}
</div>`
}
计算属性默认只有getter方法,如果想要对其改变值,可以用setter,这里有一个案例
export default {
data() {
return {firstName: 'Can', lastName: 'Wu'}
},
computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
},
//使用
template: `<div>
<div>firstName: <input v-model="firstName" /></div>
<div>lastName: <input v-model="lastName" /></div>
<div>fullName: <input v-model="fullName" /></div>
</div>`
}
注意计算属性的痛点在于一定要返回一个值,然后再使用,可是在很多时候数据是需要从后端接口取到,这就
涉及到异步操作。这个时候watch侦听器就显得很重要了。
export default {
data() {
return {name: 'zix'}
},
computed: {
//定义一个计算属性
reversedName() {
return this.name.split('').reserse().join('')
}
},
//使用
template: `<div>
name: {{name}} => reversedName: {{reversedName}}
</div>`,
watch: {
//这里如果name属性不用侦听器而用computed显然不太合适,应为computed的返回值显得无用
name(fresh, stale) {
//进行异步操作
}
}
}
下一篇: 玩转二叉树
推荐阅读
-
从零学Python之引用和类属性的初步理解
-
VUE中更改计算属性后select选中值不变的处理方法
-
Vue.js第三天学习笔记(计算属性computed)
-
Vue学习之全局和私有组件小结(七)
-
php类和对象之protected与const属性_PHP教程
-
Java之反射第十八天( --反射----类的加载--获取对象属性( 成员变量和方法)-- 构造方法 )
-
Android编程开发之TextView文字显示和修改方法(附TextView属性介绍)
-
Android编程开发之TextView文字显示和修改方法(附TextView属性介绍)
-
vue中的计算属性实例详解
-
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)