<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
監測 Vue 範例變化的一個表示式或方法。回撥函數得到的引數為新值和舊值,用一個函數取代。
簡潔的說:watch的作用可以監控一個值的變換,並呼叫因為變化需要執行的方法。可以通過watch動態改變關聯的狀態。
當firstName值變化時,watch監聽到並且執行watch中的firstName函數
<div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text" v-model="firstName"></p> </div> new Vue({ el: '#root', data: { firstName: 'Kobe', lastName: 'Bryant', fullName: '' }, watch: { firstName(newName, oldName) { this.fullName = newName + ' ' + this.lastName; } } })
handler方法和immediate屬性:
上面的例子是值變化時候,watch才執行,我們想讓元件載入立即觸發回撥函數執行就用到了handler和immediate屬性
watch: { firstName: { handler(newName, oldName) { this.fullName = newName + ' ' + this.lastName; }, // 代表在wacth裡宣告了firstName這個方法之後立即先去執行handler方法,如果設定了false,那麼效果和上邊例子一樣 immediate: true } }
deep屬性(深度監聽,常用於物件下面屬性的改變):
<div> <p>obj.a: {{obj.a}}</p> <p>obj.a: <input type="text" v-model="obj.a"></p> </div> new Vue({ el: '#root', data: { obj: { a: 123 } }, watch: { obj: { handler(newName, oldName) { console.log('obj.a changed'); }, immediate: true } } })
我們在在輸入框中輸入資料檢視改變obj.a的值時,我們發現是無效的。受現代 JavaScript 的限制 (以及廢棄 Object.observe),Vue 不能檢測到物件屬性的新增或刪除。
由於 Vue 會在初始化範例時對屬性執行 getter/setter 轉化過程,所以屬性必須在 data 物件上存在才能讓 Vue 轉換它,這樣才能讓它是響應的。
物件和陣列都是參照型別,參照型別變數存的是地址,地址沒有變,所以不會觸發watch。這時我們需要進行深度監聽,就需要加上一個屬性 deep,值為 true
比如我們在 mounted事件勾點函數中對obj進行重新賦值:
mounted: { this.obj = { a: '456' } }
這時候deep屬性就派上用場了:
watch: { obj: { handler(newName, oldName) { console.log('obj.a changed'); }, immediate: true, deep: true } }
這樣的方法對效能影響很大,修改obj裡面任何一個屬性都會觸發這個監聽器裡的 handler。我們可以設定watch監聽的屬性為'obj.a',而刪掉deep:true:
watch: { 'obj.a': { handler(newName, oldName) { console.log('obj.a changed'); }, immediate: true, // deep: true } }
最後:實際開發中,watch會隨著元件一併銷燬。
在watch中不要使用箭頭函數,因為箭頭函數中的this是指向當前作用域
計算屬性computed (如果一個值依賴多個屬性):
偵聽屬性watch(一個值變化會引起一系列值的變化或某個資料變化時做一些事情):
1.點選按鈕實現天氣的切換;
2.用watch進行監視天氣產生變化的資料;
<template> <!-- 準備好一個容器--> <div id="root"> <h2>今天天氣很{{info}}</h2> <button @click="changeWeather">切換天氣</button> </div> </template> <script> export default { name:'HelloWorld', data(){ return{ isHot:true, } }, computed:{ info(){ return this.isHot ? '炎熱' : '涼爽' } }, methods: { changeWeather(){ this.isHot = !this.isHot } }, watch:{ isHot(val){ console.log("isHot被修改了,isHot值為:",val) } } } </script> <style> </style>
注意:watch監聽的物件都是在data()中已經定義好的資料。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45