vue 計算屬性


有時候我們可能需要在{{}}里進行一些計算在展示出來數據: 

<div class="app"> <table border="1"> <thead> <th>學科</th> <th>分數</th> </thead> <tbody> <tr> <td>數學</td> <td><input type="text" v-model="Math"></td> </tr> <tr> <td>英語</td> <td><input type="text" v-model="English"></td> </tr> <tr> <td>化學</td> <td><input type="text" v-model="chemistry"></td> </tr> <tr> <td>總分</td> <td>{{Math + English + chemistry}}</td> </tr> <tr> <td>平均分</td> <td>{{(Math + English + chemistry)/3}}</td> </tr> </tbody> </table> </div>
var app = new Vue({ el:'.app', data:{ Math:88, English:77, chemistry:99, } });

雖然能解決問題,但是特別不不清晰。
這種情況下,vue給我們提供了一個特別好的解決方案:計算屬性
我們可以把這些計算的過程寫到一個計算屬性中去,然后讓它動態的計算就可以了。
計算屬性是vue實例中的選項:computed
通常里面每一個都是計算相關函數,返回最后計算出來的值。

<body> <div class="app"> <table border="1"> <thead> <th>學科</th> <th>成績</th> </thead> <tbody> <tr> <td>數學</td> <td><input type="text" v-model.number="Math"></td> </tr> <tr> <td>英語</td> <td><input type="text" v-model.number="English"></td> </tr> <tr> <td>化學</td> <td><input type="text" v-model.number="chemistry"></td> </tr> <tr> <td>總分</td> <td>{{sum}}</td> </tr> <tr> <td>平均分</td> <td>{{average}}</td> </tr> </tbody> </table> </div> <script src="jquery-3.3.1.js"></script> <script src="vue.js"></script> <script src="main.js"></script> </body>var vm = new Vue({
 el:'.app', data:{ Math:88, English: 77, chemistry:99, }, computed:{ sum:function(){ return this.Math+ this.English+this.chemistry; }, average:function(){ return Math.round(this.sum/3); } } });

如上,計算屬性一般就是用來通過其他的數據算出一個新數據,而且它有一個好處就是它把新的數據緩存下來了,當其他的數據沒有發生改變,它調用的是緩存的數據,這就極大的提高了我們程序的性能。不然可以直接用用methods了,如果寫在methods里,每次都會重新計算。所以用計算屬性比較好,因為有緩存。

使用computed 定義方法后 可以在模板中直接用方法名 比如add得到結果 而不需要像methods 需要add()調用  初學時就出錯了 值得注意一下

方法和計算屬性的選用 

相比之下,每當觸發重新渲染時,調用方法將總會再次執行函數。 

我們為什么需要緩存?假設我們有一個性能開銷比較大的的計算屬性 A,它需要遍歷一個巨大的數組並做大量的計算。然后我們可能有其他的計算屬性依賴於 A 。

如果沒有緩存,我們將不可避免的多次執行 A !如果你不希望有緩存,就請用方法。

 

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM