惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
Forbes - Security
Forbes - Security
The Last Watchdog
The Last Watchdog
TaoSecurity Blog
TaoSecurity Blog
Schneier on Security
Schneier on Security
SecWiki News
SecWiki News
V
Vulnerabilities – Threatpost
Project Zero
Project Zero
O
OpenAI News
W
WeLiveSecurity
Security Archives - TechRepublic
Security Archives - TechRepublic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
H
Hacker News: Front Page
Cisco Talos Blog
Cisco Talos Blog
Spread Privacy
Spread Privacy
Help Net Security
Help Net Security
P
Privacy & Cybersecurity Law Blog
K
Kaspersky official blog
S
Security @ Cisco Blogs
Latest news
Latest news
AWS News Blog
AWS News Blog
U
Unit 42
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Scott Helme
Scott Helme
博客园 - 司徒正美
B
Blog RSS Feed
C
Check Point Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker
Google Online Security Blog
Google Online Security Blog
Jina AI
Jina AI
aimingoo的专栏
aimingoo的专栏
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Last Week in AI
Last Week in AI
月光博客
月光博客
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
小众软件
小众软件

博客园 - 前端架构师

Claude Code 源码架构分析 我不是狐狸,我是那Harness Engineering 小龙虾的自我养成之路 vue3+ts添加公共富文本组件 微信授权没搞过? css3图片防止变形 公众号使用微信sdk的正确姿势 web离线应用前提之离线检测 es6手写一个call 同学给我来个手写的new吧 this综合篇 this绑定番外篇之箭头函数绑定 vue中引入公用过滤器? this详解下 012天this详解上 011天之跨域资源共享CORS 010天JSON.stringify()详解 009天之跨浏览器的事件处理程序 使用XHR上传文件要不要了解一下?
vue watch详解
前端架构师 · 2020-07-16 · via 博客园 - 前端架构师

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]