您好,登錄后才能下訂單哦!
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="./vue.js"></script>
<!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
<div id="app">{{fullName}} {{age}}</div>
<script type="text/javascript">
var vm = new Vue({
el: "#app",
data: {
firstName: "Tom",
lastName: "Cat",
age: 18
/*fullName: "Tom Cat" //然而這樣會(huì)有冗余變量,可以用computed來(lái)解決*/
},
//計(jì)算屬性
computed: {
fullName: function() {
console.log("計(jì)算了一次")
return this.firstName + " " + this.lastName //別忘了return
}
}
})
</script>
</body>
</html>
可以看到,刷新頁(yè)面輸出“計(jì)算了一次”,改變firstName又輸出“計(jì)算了一次”,而改變age不會(huì)再輸出“計(jì)算了一次”。如果fullName依賴的firstName、lastName沒(méi)有改變,則不會(huì)再重新計(jì)算,因?yàn)橐呀?jīng)把它們緩存了起來(lái)
當(dāng)然還可以通過(guò)methods的方式來(lái)實(shí)現(xiàn),但是只要頁(yè)面重新渲染,fullName就會(huì)重新執(zhí)行一次,它沒(méi)緩存。所以,同樣的功能,用computed會(huì)比methods更好
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="./vue.js"></script>
<!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
//注意fullName()的()
<div id="app">{{fullName()}} {{age}}</div>
<script type="text/javascript">
var vm = new Vue({
el: "#app",
data: {
firstName: "Tom",
lastName: "Cat",
age: 18
/*fullName: "Tom Cat" //然而這樣會(huì)有冗余變量,可以用computed來(lái)解決*/
},
/*//計(jì)算屬性
computed: {
fullName: function() {
console.log("計(jì)算了一次")
return this.firstName + " " + this.lastName //別忘了return
}
}*/
//當(dāng)然還可以通過(guò)methods的方法來(lái)實(shí)現(xiàn):
methods: {
fullName: function() {
console.log("計(jì)算了一次")
return this.firstName + " " + this.lastName
}
}
})
</script>
</body>
</html>
也可以用監(jiān)聽(tīng)(watch)的方式:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="./vue.js"></script>
<!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
<div id="app">{{fullName}} {{age}}</div>
<script type="text/javascript">
var vm = new Vue({
el: "#app",
data: {
firstName: "Tom",
lastName: "Cat",
age: 18,
fullName: "Tom Cat" //然而這樣會(huì)有冗余變量,可以用computed來(lái)解決
},
/*//計(jì)算屬性
computed: {
fullName: function() {
console.log("計(jì)算了一次")
return this.firstName + " " + this.lastName //別忘了return
}
}*/
/*//當(dāng)然還可以通過(guò)methods的方法來(lái)實(shí)現(xiàn):
methods: {
fullName: function() {
console.log("計(jì)算了一次")
return this.firstName + " " + this.lastName
}
}*/
//還可以用監(jiān)聽(tīng)的方式:
watch: {
firstName: function() {
console.log("計(jì)算了一次");
this.fullName = this.firstName + " " + this.lastName
},
lastName: function() {
console.log("計(jì)算了一次");
this.fullName = this.firstName + " " + this.lastName
}
}
})
</script>
</body>
</html>
(看得出來(lái),只有在監(jiān)聽(tīng)的發(fā)生改變才會(huì)執(zhí)行)
總結(jié):如果一個(gè)功能可以通過(guò)method、computed、watch來(lái)實(shí)現(xiàn),首選computed。因?yàn)樗蛍atch一樣會(huì)緩存,而且寫(xiě)的代碼比watch少,更優(yōu)于不緩存的method
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。