Vue是一款前端框架,提供了一套MVVM的數據綁定機制。其中computed是Vue提供的一個計算屬性,它會根據自己所依賴的數據的變化而自動更新。但是有時候我們需要手動改變computed的值,這時候該怎么做呢?下面就來詳細介紹如何改變computed的值。
首先,我們需要知道computed是如何計算出來的。computed中最重要的是一個 getter 函數,這個函數會根據依賴的數據進行計算,返回一個新的結果(即computed的值)。但是這里有一個重要的點,computed的getter函數是不能接收任何參數的。所以如果我們想要改變computed的值,就不能再直接修改computed中所依賴的數據(這樣會觸發computed的重新計算),而是需要額外引入一些狀態。
// 例如我們有一個computed計算出當前選中的商品總價 computed: { totalCost() { return this.selectedItems.reduce((total, item) =>total + item.price*item.amount, 0) } }, // 調用computed的值Total cost: {{ totalCost }}
接下來,我們可以通過watch監聽一些狀態的變化,當狀態發生變化的時候,我們就可以手動設置computed的新值。
// 在Vue實例中定義狀態變量 data() { return { totalCostOverride: null // 默認為null不會改變computed的值 } }, // 監聽totalCostOverride的變化,手動改變computed的值 watch: { totalCostOverride: function(newVal) { this.$nextTick(() =>{ this.$set(this, 'totalCost', newVal) }) } }
上面的代碼中,我們定義一個totalCostOverride的狀態變量,它可以用來覆蓋computed中的值。當totalCostOverride發生變化時,我們利用$set函數手動改變computed中的值。注意這里需要使用$nextTick來保證DOM已經渲染完畢,否則$set無法生效。
最后,我們可以添加一個按鈕來觸發totalCostOverride的改變,從而手動改變computed的值。
// 添加一個按鈕methods: { // 通過方法來改變totalCostOverride的值 overrideTotalCost(value) { this.totalCostOverride = value }, }
現在,我們就可以通過點擊按鈕來手動改變computed的值了。
總結一下,想要手動改變computed的值,我們需要引入一個額外的狀態變量來保存手動改變的值。然后通過watch監聽狀態變量的變化,手動修改computed的值。最后,通過按鈕等交互來觸發狀態變量的變化,從而手動改變computed的值。