從前幾個單元,對於函式的呼叫已經有一定程度的了解,這個單元來探討另外一種宣告函式的方式,computed。
先宣告一個簡單的函式:
<script>
export default {
name: 'App',
methods: {
testMethod() {
console.log('testMethod');
},
},
};
</script>
而宣告 computed 的方式為:
<script>
export default {
name: 'App',
methods: {
testMethod() {
console.log('testMethod');
},
},
computed: {
testComputed() {
console.log('testComputed');
},
},
};
</script>
那麼,computed 與 methods 的差別是什麼?
methods 與 computed 的差別,computed 不管呼叫多少次,都只會執行一次,而 methods 呼叫幾次就會執行幾次,看以下的例子:
<template>
{{ testMethod() }}
{{ testMethod() }}
{{ testComputed }}
{{ testComputed }}
</template>
<script>
export default {
name: 'App',
methods: {
testMethod() {
console.log('testMethod');
},
},
computed: {
testComputed() {
console.log('testComputed');
},
},
};
</script>
分別呼叫 testMethod 與 testComputed 各兩次,會發現 testMethod 印出兩次,而 testComputed 只會印出一次。
至於這個 console.log 要去哪裡看?可以在 Chrome 瀏覽器按下檢視 -> 開發人員選項 -> JavaScript 控制台:

就會出現這個給開發人員專用的 debug 視窗:

使用 console.log('') 這個語法都會在這裡列印出來,是常用的一個開發手法。
那問題又來了,什麼時候會需要用到 computed ?
computed 可以用在一開始網頁執行時需要的判斷,看以下這個例子:
<template>
<div v-for="data in checkDatas" :key="data.id">
{{ data.id }} {{ data.name }}
</div>
</template>
<script>
export default {
name: 'App',
data() {
return {
datas: [
{ id: 1, name: 'Jake' },
{ id: 2, name: 'Allan' },
{ id: 1, name: 'Eason' },
],
};
},
computed: {
checkDatas() {
return this.datas.filter((data) => data.id === 1);
},
},
};
</script>
在這個例子宣告了一個 datas 陣列,裡面放了三組 key-value 的資料
在 computed 內宣告一個函式 checkDatas,而這個函式會將 id 等於 1 的資料篩選出來,這邊使用了一個快速篩選的方式 filter,this.datas.filter((data) => data.id === 1) 這個寫法就表示將陣列 datas 的資料一個一個走訪,然後找到 id 等於 1 的回傳成一個陣列出來。
最後在 template 內使用走訪陣列的方式來呼叫這個函式 checkDatas,所以網頁上就只會呈現這兩個資料:
1 Jake
1 Eason
所以簡單講,如果只需要單一次的複雜運算,官方會是建議使用 computed 來執行的。
Vue3 - 從零開始學 - Day11 [完]