欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue.js每天必學(xué)之計(jì)算屬性computed與$watch

 更新時(shí)間:2016年09月05日 09:48:30   作者:i10630226  
Vue.js每天必學(xué)之計(jì)算屬性computed與$watch,為大家詳細(xì)講解計(jì)算屬性computed與$watch,感興趣的小伙伴們可以參考一下

在模板中綁定表達(dá)式是非常便利的,但是它們實(shí)際上只用于簡(jiǎn)單的操作。模板是為了描述視圖的結(jié)構(gòu)。在模板中放入太多的邏輯會(huì)讓模板過(guò)重且難以維護(hù)。這就是為什么 Vue.js 將綁定表達(dá)式限制為一個(gè)表達(dá)式。如果需要多于一個(gè)表達(dá)式的邏輯,應(yīng)當(dāng)使用**計(jì)算屬性**。

 基礎(chǔ)例子

<div id="example">
 a={{ a }}, b={{ b }}
</div>

var vm = new Vue({
 el: '#example',
 data: {
 a: 1
 },
 computed: {
 // 一個(gè)計(jì)算屬性的 getter
 b: function () {
 // `this` 指向 vm 實(shí)例
 return this.a + 1
 }
 }
})

這里我們聲明了一個(gè)計(jì)算屬性 b。我們提供的函數(shù)將用作屬性 vm.b的 getter。

console.log(vm.b) // -> 2
vm.a = 2
console.log(vm.b) // -> 3

你可以打開(kāi)瀏覽器的控制臺(tái),修改 vm。vm.b 的值始終取決于 vm.a 的值。

你可以像綁定普通屬性一樣在模板中綁定計(jì)算屬性。Vue 知道 vm.b 依賴(lài)于 vm.a,因此當(dāng) vm.a 發(fā)生改變時(shí),依賴(lài)于 vm.b 的綁定也會(huì)更新。而且最妙的是我們是聲明式地創(chuàng)建這種依賴(lài)關(guān)系:計(jì)算屬性的 getter 是干凈無(wú)副作用的,因此也是易于測(cè)試和理解的。

計(jì)算屬性 vs. $watch

Vue.js 提供了一個(gè)方法 $watch,它用于觀察 Vue 實(shí)例上的數(shù)據(jù)變動(dòng)。當(dāng)一些數(shù)據(jù)需要根據(jù)其它數(shù)據(jù)變化時(shí), $watch 很誘人 —— 特別是如果你來(lái)自 AngularJS。不過(guò),通常更好的辦法是使用計(jì)算屬性而不是一個(gè)命令式的 $watch 回調(diào)??紤]下面例子:

<div id="demo">{{fullName}}</div>

var vm = new Vue({
 el: '#demo',
 data: {
 firstName: 'Foo',
 lastName: 'Bar',
 fullName: 'Foo Bar'
 }
})

vm.$watch('firstName', function (val) {
 this.fullName = val + ' ' + this.lastName
})

vm.$watch('lastName', function (val) {
 this.fullName = this.firstName + ' ' + val
})

上面代碼是命令式的重復(fù)的。跟計(jì)算屬性對(duì)比:

var vm = new Vue({
 data: {
 firstName: 'Foo',
 lastName: 'Bar'
 },
 computed: {
 fullName: function () {
 return this.firstName + ' ' + this.lastName
 }
 }
})

這樣更好,不是嗎?

計(jì)算 setter

計(jì)算屬性默認(rèn)只是 getter,不過(guò)在需要時(shí)你也可以提供一個(gè) setter:

// ...
computed: {
 fullName: {
 // getter
 get: function () {
 return this.firstName + ' ' + this.lastName
 },
 // setter
 set: function (newValue) {
 var names = newValue.split(' ')
 this.firstName = names[0]
 this.lastName = names[names.length - 1]
 }
 }
}
// ...

現(xiàn)在在調(diào)用 vm.fullName = 'John Doe' 時(shí),setter 會(huì)被調(diào)用,vm.firstName 和 vm.lastName 也會(huì)有相應(yīng)更新。

本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。

關(guān)于vue.js組件的教程,請(qǐng)大家點(diǎn)擊專(zhuān)題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論