計算屬性和監聽器
阿新 • • 發佈:2020-12-17
技術標籤:vue
計算屬性 computed是:return的值發生變化,計算的值跟著變
計算屬性是基於它們的響應式依賴進行快取的。只在相關響應式依賴發生改變時它們才會重新求值。
計算屬性有快取性,如果值沒有變化,則頁面不會重新渲染,這是計算屬性的一個優勢。
監聽器 watch是:監聽的物件發生變化,執行對應的函式
watch是觀察某一個屬性的變化,重新計算屬性值。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
<div>
<h3>計算屬性 computed:</h3>
<div>陣列list的長度為:{{length}}</div>
<h3>監聽器 watch:</h3>
< div>監聽到陣列list的長度為:{{listLength}}</div>
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data() {
return {
list: [1, 1, 1],
listLength: 0
};
},
computed: {
length() {
return this.list.length;
}
},
watch: {
// 下面這種預設寫法的監聽器,初始化時不執行
list(newValue, oldValue) {
this.listLength = newValue.length;
}
}
})
</script>
</body>
</html>
一、上述程式碼和頁面中有一個問題:
我們寫了一個監聽器,用來監聽陣列list長度的變化,但是很不幸我們看到頁面上所顯示的listLength依舊是初始值0。
這是為什麼呢?
這裡就是我們需要注意的一個問題:
在我們使用watch即監聽器來實現功能的時候,如果不加特別的宣告,它表示所監聽的物件變化之後才會執行,也就是說它一開始不會執行,所以listLength沒有變化。
二、如何解決上述問題呢?
需要使用另一個寫法,即帶選項的watch,並且把immediate屬性置為true
我們使用vscode snippets外掛用vwatch-option,快捷生成的watch預設就是true