Vue 框架-04-計算屬性

肖朋偉發表於2018-11-13

Vue 框架-04-計算屬性

計算屬性是什麼?

大家可以去看官網解釋:計算屬性和偵聽器

今天的第一個小例項:
在這裡插入圖片描述

為啥先放折磨一個例項,之前資料繫結的就已經可以實現了,看起來那麼簡單,就是為了告訴大家,當點選第一個按鈕【Add to A】的時候,

Age + A = 這個方法執行了,大家可以看得到

實際呢,下面的兩個方法都會重新整理,雖然 Age + B = 沒有效果,是因為沒有修改資料,後面會詳細說明

原始碼 html 檔案:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>VueLearn-cnblogs/xpwi</title>
        <!--引入自定義的樣式-->
        <link rel="stylesheet" href="css/style.css" />
        <!--引入 vue 核心 js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        
    </head>
    <body>
        
        <!--vue-app 是根容器,定義一個 id,然後在 js 裡操作-->
        <div id="vue-app">
            
            <!--name 具體的值是在 js 中定義的-->
            <h2>Computed 計算屬性</h2>
            <button @click="a++">Add to A</button>
            <button @click="b++">Add to B</button>
            <p>A - {{a}}</p>
            <p>B - {{b}}</p>
            <p>Age + A = {{addToA()}}</p>
            <p>Age + B = {{addToB()}}</p>
            
        </div>
        
        <!--引入自己的 js,注意必須寫在 body 標籤裡最後,因為必須先載入你的整個 HTML DOM,才回去執行 vue 例項-->
        <script type="text/javascript" src="js/computed.js" ></script>
    </body>
</html>

原始碼 js 檔案:

//例項化 vue 物件
new Vue({
    //注意程式碼格式
    
    //el:element 需要獲取的元素,一定是 html 中的根容器元素
    el:"#vue-app",
    data:{
        a : 0,
        b : 0,
        age : 20,
    },
    methods:{
    
        addToA: function(){
            return this.a + this.age;
        },
        addToB: function(){
            return this.b + this.age;
        }
    }

});

其實大家可以看到,點選按鈕,addToA() 方法並沒有直接的去觸發,而是我們點選了第一個按鈕,整個 methods 中的方法都會執行一遍,現在證明一下,上面的兩個方法都會執行

修改上面 html 檔案為:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>VueLearn-cnblogs/xpwi</title>
        <!--引入自定義的樣式-->
        <link rel="stylesheet" href="css/style.css" />
        <!--引入 vue 核心 js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        
    </head>
    <body>
        
        <!--vue-app 是根容器,定義一個 id,然後在 js 裡操作-->
        <div id="vue-app">
            
            <!--name 具體的值是在 js 中定義的-->
            <h2>Computed 計算屬性</h2>
            <button @click="a++;b++">Add to A</button>
            <button @click="b++">Add to B</button>
            <p>A - {{a}}</p>
            <p>B - {{b}}</p>
            <p>Age + A = {{addToA()}}</p>
            <p>Age + B = {{addToB()}}</p>
            
        </div>
        
        <!--引入自己的 js,注意必須寫在 body 標籤裡最後,因為必須先載入你的整個 HTML DOM,才回去執行 vue 例項-->
        <script type="text/javascript" src="js/computed.js" ></script>
    </body>
</html>

可以看到只是把,第一個按鈕對執行了一條語句,這時候:

在這裡插入圖片描述

大家可以看到,就是當我們執行修改時,所有 methods 中的方法都會執行,整個 dom 都會重新載入一遍。這也很耗費瀏覽器效能的,然而下面要介紹的 Computed 就不是,點選的時候,只會執行相關的 計算屬性

但是,需要注意的一點就是,methods 和 computed 在載入 js 檔案的時候,都會預設全執行一遍

而 computed 在後續點選觸發的時候,只會觸發相應的計算屬性

為了說明上面這一點,把 a 賦值成 1,可以看到默然全部執行的效果

下面是 computed 的小例項:

在這裡插入圖片描述
【注意】:使用 computed 不加 () ,直接使用方法名,方法定義和 methods 一樣,請看原始碼

原始碼 html 檔案:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>VueLearn-cnblogs/xpwi</title>
        <!--引入自定義的樣式-->
        <link rel="stylesheet" href="css/style.css" />
        <!--引入 vue 核心 js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        
    </head>
    <body>
        
        <!--vue-app 是根容器,定義一個 id,然後在 js 裡操作-->
        <div id="vue-app">
            
            <!--name 具體的值是在 js 中定義的-->
            <h2>Computed 計算屬性</h2>
            <button @click="a++">Add to A</button>
            <button @click="b++">Add to B</button>
            <p>A - {{a}}</p>
            <p>B - {{b}}</p>
            <p>Age + A = {{addToA}}</p>
            <p>Age + B = {{addToB}}</p>
            
        </div>
        
        <!--引入自己的 js,注意必須寫在 body 標籤裡最後,因為必須先載入你的整個 HTML DOM,才回去執行 vue 例項-->
        <script type="text/javascript" src="js/computed.js" ></script>
    </body>
</html>

原始碼 js 檔案:

//例項化 vue 物件
new Vue({
    //注意程式碼格式
    
    //el:element 需要獲取的元素,一定是 html 中的根容器元素
    el:"#vue-app",
    data:{
        a : 0,
        b : 0,
        age : 20,
    },
    methods:{
    
//      addToA: function(){
//          return this.a + this.age;
//      },
//      addToB: function(){
//          return this.b + this.age;
//      }
    },
    computed:{
    
        addToA: function(){
            console.log("addToA 執行一次");
            return this.a + this.age;
        },
        addToB: function(){
            console.log("addToB 執行一次");
            return this.b + this.age;
        }
    },

});

上面就是關於計算屬性的描述了

相關文章