Vue的计算属性和侦听器Watch

一、计算属性

1、什么是计算属性?

<div>
	{
    
    {
    
    message.split('').reverse().join('')}}
</div>

模板设计的初衷是用于简单计算的,在模板内放太多的逻辑会让模板难以维护,对于任何复杂的逻辑都可以使用计算属性
对于上述例子使用计算属性来处理

<div id="app">
	<p>{
    
    {
    
    message}}</p>
	<p>reversedMessage</p>
</div>
<script>
	var vm = new Vue({
    
    
		el:"#app",
		data:{
    
    
			message:''
		},
		computed:{
    
    
			reversedMessage:function(){
    
    
			return this.message.split('').reverse().join('')
			}
		}
	})
</script>

2、计算属性的缓存

我们可以将同一个函数定义为一个方法,也可以将其定义为一个计算属性,但是计算属性是基于它的响应式依赖进行缓存的,只有在响应式依赖发生改变时计算属性才会重新求值,只要message没有发生改变,多次访问计算属性reservedMessage时会立即返回之前的计算结果,不会重新执行计算属性。

3、get函数什么时候会执行?

  1. 初次读取时会执行一次
  2. 当依赖的数据发送改变时

4、计算属性如何传参数?

full(){
    
    
	return (value)=> {
    
    
	return value+this.fist+this.last
	}
}

二、侦听器watch

1、监听data中的数据

只要data中的数据发生改变,就会执行相应的逻辑。

<script>
     var vm = new Vue({
    
    
       el: '#app',
       data: {
    
    
         firstName: '',
         lastName: '',
         fullName: ''
       },
       watch: {
    
    
         firstName(newVal, oldVal) {
    
    
           console.log(newVal, oldVal)
           this.fullName = newVal + this.lastName
         }, 
         lastName(newVal, oldVal) {
    
    
             this.fullName = this.firstName + newVal
         }
       }
     })
   </script>

2、深度监听

data(){
    
    
	return {
    
    
		number:{
    
    
			a:1,
			b:2
		}
	}
}

监听多级结构中某个属性的变化

'number.a':{
    
    
	handler:function(newVal,oldVal){
    
    
		console.log(newVal)
	},
}

监听多级结构中所有属性的变化

number:{
    
    
	handler:function(newVal,oldVal){
    
    
		console.log(newVal,oldVal)
	},
	deep:true
}

3、watch监听路由的变化


watch: {
    
    
	'$route.path': function (newVal, oldVal) {
    
    
		 if (newVal === '/login') {
    
    
		 	console.log('欢迎进入登录页面');
		 }
	}
}
  watch:{
    
    
  	//to是将要进入的路由,from是当前页面的路由
    '$route' (to, from) {
    
    
      if(to.path == "/xxx"){
    
    
        //操作
      }
    }
  },

4、watch监听的属性

immediate
watch监听在第一次绑定的时候不会监听函数,只有值发送改变时才会执行,如果需要在最初绑定值的时候就进行监听,则使用immediate属性
handler
需要具体执行的方法,监听数组或对象的属性时用到的方法。
deep
如果监听一个对象的改变时,普通的watch无法监听对象内部属性的改变,此时需要deep属性对对象进行深度监听。

猜你喜欢

转载自blog.csdn.net/qq_45701130/article/details/121445744