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;
}
},
});
上面就是關於計算屬性的描述了