Vue中的$watch方法可以用來監聽數據的變化。其中$watch6是一個特殊的watch方法,它可以優化性能,在監聽數組和對象的時候只會監聽最內層的屬性,而不是整個對象或數組。
//例子: watch: { ‘obj.prop1.prop2’: function() { // 對 obj.prop1.prop2 的變化作出響應 } }
在上面的例子中,我們使用了$watch6方法來監聽obj對象中的prop1屬性中的prop2屬性。注意,這里是使用字符串的形式來表示要監聽的屬性路徑。
這種形式的監聽可以減少不必要的操作,例如在監聽一個數組時,當該數組發生變化時,Vue默認會在數組的整個長度范圍內遍歷所有元素并執行相應的watch方法,代價十分昂貴。
//例子: watch: { ‘arr’: function() { // 對 arr 中所有元素的變化作出響應 } }
而在使用$watch6方法時,只會監聽數組中每個元素的最內層屬性,而不是整個數組:
//例子: watch: { ‘arr.prop1.prop2’: function() { // 對 arr 的每個元素中的 prop1.prop2 的變化作出響應 } }
這樣就可以大大降低監聽數組時的性能消耗。
需要注意的是,$watch6方法只能監聽已存在的屬性。如果要監聽一個新添加的對象的屬性,需要使用$set方法先為該對象添加屬性,并且在響應變化時使用該方法而非直接賦值。
//例子: this.$set(this.$data, 'newObj', { prop1: { prop2: 'value' } }) watch: { ‘newObj.prop1.prop2’: function() { // 對 newObj 中的 prop1.prop2 的變化作出響應 } }
總之,$watch6方法是在監聽數組和對象時優化性能的好方法,可以減少不必要的性能消耗。需要記住的是,使用它時需要傳入屬性路徑的字符串形式,而且只能監聽已存在的屬性。
下一篇c 表格json格式