1. 程式人生 > >Vue 框架-04-計算屬性 computed

Vue 框架-04-計算屬性 computed

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;
		}
	},

});

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