Vue.js的$watch是Vue框架中的一個非常重要的特性,它允許我們監聽數據對象中某個屬性的變化,并在發生變化時進行一些操作。
我們可以使用$watch來監聽數據,其本質是一個觀察者模式,當目標變量發生改變,觀察者會立刻收到通知,接著執行相應的邏輯代碼。
//定義一個數據對象 var data = { name: 'Jack', age: 24 }; //創建Vue實例 var vm = new Vue({ data: data }); //監聽數據變化 vm.$watch('name', function(newValue, oldValue) { //當name變化時會執行此函數 console.log('name變為了' + newValue); });
在上述代碼中,我們監聽了數據對象data中的name屬性的變化,當name屬性發生變化時,$watch將會調用第二個參數中傳入的回調函數,并傳入新值和舊值。
在實際開發中,$watch常見的用法是監聽某個屬性的變化并進行一些DOM操作或者向服務器端發送請求。
var counter = { count: 0 }; //創建Vue實例 var vm = new Vue({ data: counter }); //監聽計數器變化并修改DOM vm.$watch('count', function(newValue, oldValue) { var counterEl = document.getElementById('counter'); counterEl.innerHTML = '計數器' + newValue; }); //定時器來觸發計數器變化 setInterval(function() { counter.count++; }, 1000);
上述代碼中,我們創建了一個計數器對象,使用$watch監聽了count屬性的變化,并在變化時修改了DOM元素中的內容。我們而路定時器來改變計數器的值,可見計數器在每秒鐘的間隔中不斷地變化,并不斷更新DOM顯示。
$watch還可以用于監聽一個函數的返回結果,這種情況下,$watch本身就是一個函數調用,并將函數的返回結果作為參數傳遞給回調函數。
//定義一個方法,用于計算圓形面積 function calculateArea(r) { return Math.PI * r * r; } var circle = { r: 3, area: 0 }; //創建Vue實例 var vm = new Vue({ data: circle }); //監聽計算結果并保存到數據對象中 vm.$watch(function() { return calculateArea(circle.r); }, function(newValue, oldValue) { circle.area = newValue; }); //每次改變半徑后計算圓形面積 setInterval(function() { circle.r++; }, 1000);
在上述代碼中,我們使用$watch監聽了calculateArea函數的返回結果,并保存結果到數據對象中。在定時器每秒鐘的間隔中,我們不斷改變圓形的半徑,$watch會自動計算面積,并將新面積數據保存到數據對象中。
上一篇vue.js 多大
下一篇c 自帶的json序列化