這是我參與8月更文挑戰的第4天,活動詳情查看:8月更文挑戰html
Vue 經過
watch
選項提供了一個更通用的方法,來響應數據的變化。當須要在數據變化時執行異步或開銷較大的操做時,這個方式是最有用的。git
<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 } } })
複製代碼
這段代碼的做用就是監聽firstName和fullName,當它們發生變化的時候,就改變fullname的值。github
經過添加immediate選項來實現web
const vm = new Vue({
el: '#app',
data: {
info: {
username: 'admin'
}
},
watch:{
info:{
handle(newVal){
console.log(newVal)
},
// 實現剛進入頁面就觸發監聽
immediate: true
}
}
})
複製代碼
在上述代碼中,當username發生變化時咱們是不能監聽成功的,由於變化的是對象屬性的值,所以須要深度監聽,添加deep選項便可api
const vm = new Vue({
el: '#app',
data: {
info: {
username: 'admin'
}
},
watch:{
info:{
handle(newVal){
console.log(newVal)
},
// 實現剛進入頁面就觸發監聽
immediate: true,
// 實現深度監聽,只要對象中的任何一個屬性變化了,都會觸發「對象的偵聽」
deep: true
}
}
})
複製代碼
上述代碼中執行結果是打印info這個對象,咱們但願打印的username的值,須要加上newVal.username仍是比較麻煩的,咱們其實能夠直接監聽並打印變化子屬性的值,只須要在要監聽的子屬性外面加上一層單引號便可:markdown
const vm = new Vue({
el: '#app',
data: {
info: {
username: 'admin'
}
},
watch:{
'info.username': {
handle(newVal){
console.log(newVal)
}
}
}
})
複製代碼
⚽本文介紹了Vue中的偵聽器的基本使用以及如何實現深度監聽,但願你們閱讀完有必定的收穫呦~
⚾若是這篇文章對你有幫助的話,麻煩點贊收藏喲~
🏀GitHub 博客地址: github.com/Awu1227 。
🏉筆者還有其餘專欄,歡迎閱讀~
🏐玩轉CSS之美
🎳深刻淺出JavaScript
app