Vue---计算属性与侦听器

186 阅读3分钟

计算属性

www.jianshu.com/p/3799541fd…

对于任何的复杂逻辑,需使用计算属性

所有的计算属性都以函数的形式写在Vue实例内的computed选项内,最终返回计算后的结果

小栗子:

<div id="app">
	{{fullName}}
</div>
<script type="text/javascript">
	var vm = new Vue({
		el:"#app",
		data:{
			firstName:"John",
			lastName:"Green"
		},
		//计算属性
		computed:{
			fullName:function(){
				return this.firstName + " " + this.lastName;
			}
		}
	})
</script>

计算属性计算出的值会进行缓存,所依赖变量不改变的情况下,只会计算一次,后续调用缓存,若相关数据改变则重新进行渲染

getter和setter

www.jianshu.com/p/e4c742750…

每个计算属性都包含一个getter和一个setter函数

默认情况下,只是利用getter函数来读取实例的计算属性

如果需要时,可以提供setter函数,当手动修改计算属性的值时,就会触发setter函数,执行自定义操作

setter函数应用举例:
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];
    }
  } 
}

在computed中的函数中,分别用get和set分隔开getter和setter函数,当对值重新设置时调用setter函数改变相关联的值,相关联的值改变也会引起页面显示内容的改变

计算属性缓存vs方法

计算属性是基于他们的相应式依赖进行缓存的,只有在相关的相应式依赖发生改变时才会重新求值

若将函数定义成方法放在表达式中进行调用,则在Vue实例中需要写在methods当中

小栗子:

<div id="app">
	{{fullName()}}
</div>
methods:{
	fullName:function(){
	return this.firstName + " " + this.lastName;
}

methods与computed区别

  • 调用方法时,只要页面重新渲染,方法就会重新执行,即使依赖的数据没有发生变化
  • 调用计算属性,不管是否渲染,只要依赖的数据未发生改变,就不会改变
  • 调用方法需要在函数名后面添加括号
  • 计算属性也是属性,在双大括号内使用不需要添加括号
  • 如果想要使用缓存则应该使用计算属性

计算属性vs侦听属性

Vue使用侦听属性来观察和响应实例上的数据变动,当有数据岁其他数据变化而变化时,很容易滥用watch,所以使用计算属性代替watch

小栗子:侦听器方式

<div id="demo">{{ fullName }}</div>
var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
  }
})

使用监听属性当名字改变时,会调用相应的方法,放在这各代码当中,名和姓的改变会分别调用两个方法,代码也较多

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})

使用计算属性,有效的减少了代码的数量,当一个值发生改变时就会调用该函数

侦听器

blog.csdn.net/zfz5720/art…

在需要自定义侦听器时,Vue提供使用watch选项来自定义侦听器,对数据改变前后的值进行操作

watch监听的时定义的变量,当变量的值发生改变时,调用对应的方法

$watch方法

观察变量的变化,并获取变化前后的值

使用方法:

vm.$watch('a',function(newval,oldval){
    //回调函数
})

该方法使用在改变属性值的代码之前,会返回改变前后的值