vue 4 計算屬性 監聽屬性

2021-10-06 13:01:18 字數 2500 閱讀 9479

>

}<

/div>

newvue(})

<

/script>

例項 1中模板變的很複雜起來,也不容易看懂理解。接下來我們看看使用了計算屬性的例項:

>

原始字串:

}<

/p>

計算後反轉字串:

}<

/p>

<

/div>

var vm =

newvue(,

computed:}}

)<

/script>

computed 與 methods

我們可以使用 methods 來替代 computed,效果上兩個都是一樣的,但是 computed 是基於它的依賴快取,只有相關依賴發生改變時才會重新取值。而使用 methods ,在重新渲染的時候,函式總會重新呼叫執行

可以說使用 computed 效能會更好,但是如果你不希望快取,你可以使用 methods 屬性。

computed setter

computed 屬性預設只有 getter ,不過在需要時你也可以提供乙個 setter

var vm =

newvue(,

computed:

,// setter

set: function (newvalue)}}

})// 呼叫 setter, vm.name 和 vm.url 也會被對應更新

vm.site =

'菜鳥教程 '

;//呼叫get,將更新後的值返回

document.

write

('name: '

+ vm.name)

;document.

write('

');document.

write

('url: '

+ vm.url)

;

雖然計算屬性在大多數情況下更合適,但有時也需要乙個自定義的偵聽器。這就是為什麼 vue 通過 watch 選項提供了乙個更通用的方法,來響應資料的變化。當需要在資料變化時執行非同步或開銷較大的操作時,這個方式是最有用的。

用法1:用watch來響應資料的變化

示例:計數器

>

"font-size: 20px;"

>計數器:

}<

/p>

="count++"

>點我<

/button>

<

/div>

var vm =

newvue(,

watch:}}

)//上面等價於下面

var vm1 =

newvue(}

)vm1.$watch

("count"

,function

(newv, oldv)

)<

/script>

immediate

這樣使用watch時有乙個特點,就是當值第一次繫結的時候,不會執行監聽函式,只有值發生改變才會執行。如果我們需要在最初繫結值的時候也執行函式,則就需要用到immediate屬性,並將其屬性值設定為true

watch:

, immediate:

true

}}

deep

當需要監聽乙個物件的改變時,普通的watch方法無法監聽到物件內部屬性的改變,只有data中的資料才能夠監聽到變化,此時就需要deep屬性對物件進行深度監聽

"text" v-model=

"cityname.name"

/>

data ()}

},watch:

, immediate:

true

, deep:

true

}}

當物件屬性較多時,每個屬性值的變化都會執行handler。如果只需要監聽物件中的乙個屬性值,則可以做以下優化:使用字串的形式監聽物件屬性:

watch:

, deep:

true

, immediate:

true

}}

computer和watch

共同點是:都是希望在依賴資料發生改變的時候,被依賴的資料根據預先定義好的函式,發生「自動」的變化 。

不同點是:

1.watch擅長處理的場景:乙個資料影響多個資料(乙個資料改變時,如計數器示例)

2.computed擅長處理的場景:乙個資料受多個資料影響(多個資料變化時,如computed setter)

Vue計算屬性和監聽屬性

可以看下以下反轉字串的例子 模板變的很複雜起來,也不容易看懂理解 使用了計算屬性的例項 原始字串 計算後反轉字串 例項中宣告了乙個計算屬性 reversedmessage 提供的函式將用作屬性 vm.reversedmessage 的 getter vm.reversedmessage 依賴於 vm...

Vue計算屬性和監聽屬性

1 關鍵字 2 計算屬性 ku 姓 text v model lastname input 名 text v model firstname input 姓名 text v model fullname input div template export default computed metho...

Vue計算屬性和監聽屬性

可以看下以下反轉字串的例子 模板變的很複雜起來,也不容易看懂理解 使用了計算屬性的例項 原始字串 計算後反轉字串 例項中宣告了乙個計算屬性 reversedmessage 提供的函式將用作屬性 vm.reversedmessage 的 getter vm.reversedmessage 依賴於 vm...