zoukankan      html  css  js  c++  java
  • vue watch详解

    watch的详细用法:

    watch:常规用法1

    <input type="text" v-model="uerName"/>
    
    data(){
    	return {
    		userName:'qdleader'
    	}
    },
    watch:{
    	userName(newName, oldName) {
    		//...
    	}
    }
    

    也可以写一个监听处理函数, 当每次监听到 cityName 值发生改变时,执行函数。也可以在所监听的数据后面直接加字符串形式的方法名:

    watch: {
        userName: 'nameChange'
        }
     } 
    

    这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

    因此当我门在子组件props首次获取父组件传过来的默认值时候,需要立即执行一次函数,这就引出第二种immediate

    2.immediate和handler

    data(){
    	return {
    		userName:'qdleader'
    	}
    },
    watch: {
    	userName:{
    		handler(newName, oldName) {
    			//..
    		},
    		immediate:true,//immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。
    	}
    }
    

    3.deep

    还有很多时候,我们是要监听对象某一属性变化的,这时候就可以用deep

    data(){
    	return {
    		userInfo:{
    			id:1,
    			name:'qdleader'
    		}
    	}
    },
    
    watch:{
    	userInfo: {
    		handler (newName, oldName) {
    			//...
    		},
    		deep:true,
    		immediate:true
    	}
    }
    

    这里有个不太好的地方。虽然设置了deep:true,我们可以坚挺到userInfo.name的变化。但是此时会给userinfo的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

    watch:{
    	'userInfo.name': {
    		handler (newName, oldName) {
    			//...
    		},
    		deep:true,
    		immediate:true
    	}
    }
    

    同学问了,监听对象属性还有没有别的方法呢?

    别着急呀!

    监听对象属性computed也可以帮帮忙的。

    computed: {
      getName: function() {
    	return this.userInfo.name
     }
    },
    watch:{
    	getName:{
    		handler:function(){
    			//do something
    		}
    	}
    }
    

    //延伸。。 监听路由变化:

    watch:{
          '$route.path':function(newVal,oldVal){
            //console.log(newVal+"---"+oldVal);
            if(newVal === '/login'){
              console.log('欢迎进入登录页面');
            } else if(newVal === '/register'){
              console.log('欢迎进入注册页面');
            }
          }
     }
    或者:
    watch:{
      $route(to,from){
        console.log(to.path);
      }
    },
    

    即使道路坎坷不平,车轮也要前进;即使江河波涛汹涌,船只也航行。 最后,前端有兴趣的可以关注下,也可以加群,一起成长。还有https://github.com/qdleader/qdleader[https://github.com/qdleader/qdleader]

  • 相关阅读:
    C++指针详解
    C++中#include包含头文件带 .h 和不带 .h 的区别
    #if的使用说明
    非常简单的语音朗读功能
    C#基础笔记(第十一天)
    C#基础笔记(第十天)
    手机管理系统
    编程书籍大集合
    centos 安装多实例数据库
    Python3 网络爬虫(请求库的安装)
  • 原文地址:https://www.cnblogs.com/bbqq1314/p/13321444.html
Copyright © 2011-2022 走看看