首頁>技術>

computed 選項定義計算屬性計算屬性 類似於 methods 選項中定義的函式計算屬性 會進行快取,只在相關響應式依賴發生改變時它們才會重新求值。函式 每次都會執行函式體進行計算。計算屬性(雙向繫結)計算屬性預設只有 getter ,不過在需要時你也可以提供一個 setter監聽器 watch當屬性資料發生變化時,對應屬性的回撥函式會自動呼叫, 在函式內部進行計算透過 watch 選項 或者 vm 例項的 $watch() 來監聽指定的屬性需求: 透過 watch 選項 監聽數學分數, 當數學更新後回撥函式中重新計算總分sumScore3透過 vm.$watch() 選項 監聽英語分數, 當英語更新後回撥函式中重新計算總分sumScore3

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

</head>

<body>

<div id="app">

數學: <input type="text" v-model="mathScore">

英語: <input type="text" v-model="englishScore"><br/>

總分(函式): <input type="text" v-model="sumScore()"><br/>

總分(計算屬性-單向繫結): <input type="text" v-model="sumScore1"><br/>

總分(計算屬性-雙向繫結): <input type="text" v-model="sumScore2">

總分(監聽器): <input type="text" v-model="sumScore3">

</div>

<script src="./node_modules/vue/dist/vue.js"></script>

<script>

/*

1、函式沒有快取,每次都會被呼叫

2、計算屬性有快取,只有當計算屬性體內的屬性值改變後才會被呼叫,不然不會被呼叫

3、函式只支援單向

4、計算屬性預設情況只有getter函式,而沒有setter函式,所以只支援單向

如果需要進行雙向,則需要自定義setter屬性

*/

var vm = new Vue({

el: '#app',

data: {

mathScore: 80,

englishScore: 90,

sumScore3: 0

},

methods: {

sumScore: function(){

console.log("sumScore被呼叫")

// this 指向的就是vm例項,-0是為了字串轉為數字運算

return (this.mathScore - 0) + (this.englishScore - 0)

}

},

computed: {

sumScore1: function(){

// 計算屬性有快取,如果計算屬性體內的屬性值沒有發生變化,則不會重新計算,只有發生變化的時候才會重新計算

console.log('計算屬性被呼叫')

return (this.mathScore - 0) + (this.englishScore - 0)

},

sumScore2: {

get: function(){

console.log('計算屬性get被呼叫');

return (this.mathScore - 0) + (this.englishScore - 0)

},

set: function(value){

console.log('計算屬性set被呼叫');

var avg = value / 2

this.mathScore = avg

this.englishScore = avg

}

}

},

watch:{

mathScore: function(newValue,oldValue){

console.log('watch監聽器監聽數學分數變化')

this.sumScore3 = (newValue - 0) + (this.englishScore - 0)

}

}

})

vm.$watch('englishScore',function(newValue){ this.sumScore3 = (newValue - 0) + (this.mathScore - 0) }) </script></body></html>

git原始碼:https://github.com/caiyuanzi-song/vue-demo.git

6
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • GitLab CI/CD 前端專案