Vue.js中的計算屬性(computed properties)是用于聲明響應式依賴的屬性。它們會根據它們的依賴進行緩存,并且只有在相關依賴發生改變時才會重新求值。這使得它們非常適合用來處理復雜邏輯和數據處理。
基本用法
在Vue實例中,可以通過computed
選項來定義計算屬性:
var vm = new Vue({data: {message: 'Hello Vue!',},computed: {// 計算屬性的 getterreversedMessage: function () {// `this` 指向 vm 實例return this.message.split('').reverse().join('');}}
});console.log(vm.reversedMessage); // 輸出: "!euV olleH"
計算屬性的緩存
計算屬性默認是具有緩存功能的,只有相關依賴發生改變時才會重新求值。在上面的例子中,只有當message
發生變化時,reversedMessage
才會重新計算。
計算屬性 vs 方法
與方法(methods)相比,計算屬性是基于它們的響應式依賴進行緩存的。這意味著只要message
沒有發生變化,多次訪問reversedMessage
會立即返回之前的計算結果,而不必重新執行函數。
計算屬性的setter
除了getter,計算屬性還可以具有setter,用于處理對屬性的更新:
var vm = new Vue({data: {firstName: 'John',lastName: 'Doe'},computed: {fullName: {// getterget: function () {return this.firstName + ' ' + this.lastName},// setterset: function (newValue) {var names = newValue.split(' ')this.firstName = names[0]this.lastName = names[names.length - 1]}}}
});console.log(vm.fullName); // 輸出: "John Doe"vm.fullName = 'Jane Smith';
console.log(vm.firstName); // 輸出: "Jane"
console.log(vm.lastName); // 輸出: "Smith"
總結
計算屬性適合用于處理復雜邏輯或者對數據進行轉換的場景,尤其是需要依賴多個響應式數據的情況。通過利用緩存,Vue能夠高效地計算和更新這些屬性,同時保持代碼簡潔和可讀性。
?