Vue框架整理:computed計算屬性設置與緩存


簡單的一些小計算可以直接用模板內的表達式計算,比較復雜一點的就建議使用“計算屬性來運算了”,也方便后期的維護;
vue所有的計算屬性都以函數的形式寫在Vue實例內的computed里面,返回計算后的數據。

計算屬性可以同時按多個Vue實例來計算,只要其中任何一個數據發生變化,
計算屬性就會重新計算一遍,返回新的數據,相對的刷新視圖中的數據

比如:

<div id="v1">
    <!--這里顯示的是computed中的函數-->
    共計:{{ total }}
</div>


<script src="vue.min.js"></script>
<script>
    var app=new Vue({
        el:"#v1",
        data:{
            val:[
                { price: 199,num:30},
                { price: 299,num:20},
                { price: 399,num:10}
            ]
        },
        computed:{
            total:function () {
                var vel=this.val;
                var sum=0,len=vel.length;
                for(var i=0;i<len;i++){
                    sum+=vel[i].price * vel[i].num
                }
                return sum;
            }
        }
    })
</script>

 

 

每個計算屬性都有一個getter函數 和 setter函數,上面的示例只是用了computed的唯一默認屬性,就是getter , setter一般用來手動修改數據

<div id="v1">
    {{ value }}
</div>


<script src="vue.min.js"></script>
<script>
    var app=new Vue({
        el:"#v1",
        data:{
            first:"Sherlock",
            second:"love",
            third:"John"
        },
        computed:{
            value: {
                get:function () {     //getter讀取數據
                    return this.first + " ~ " + this.second + " ~ " +  this.third
                },

                set:function (val) {    //setter 需要時觸發
                    var result=val.split(" ~ ");
                    this.first=result[0];
                    this.third=result[2];
                }
            }
        }
    });

    app.value="John ~ love ~ Sherlock";  //在這里觸發setter
</script>

另外,計算屬性不僅可以通過當前的當前的實例數據計算,也可以做到 “跨實例” 取值,用法如下:

<script>
    var v1=new Vue({
        el:"#v1",
        data:{
            num:1
        }
    });

    var v2=new Vue({
        el:"#v2",
        data:{
            num:2
        },
        computed:{
            total:function () {
                var n1="我是上一個實例的數據 :"+v1.num,
                    n2="我是本實例的數據:"+this.num;
                return n1 +" .............  " +n2;
            }
        }
    })
</script>

 

頁面顯示:

 

 

 

 

對於computed計算屬性來說還有一個很重要的作用就是:緩存
一般情況下,computed(計算屬性) 和 methods(方法)執行出來的效果是一樣的,
但是computed的好處是:
只有在與它相關或者需要的數據發生改變時才會重新求值。
這就意味着只要 我們在計算時設置的數據還沒有發生改變,即使多次訪問 reversedMessage 計算屬性會立即返回之前的計算結果,而不必再次執行函數。

就拿第一個例子來說:

 

 

 

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

 


免責聲明!

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



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