computed:
1. computed 具有緩存功能,可以監聽對象某個具體屬性。
2.變量不在 data中定義,而是定義在computed中。
3.根據一個現有數據去生成一個新數據,並且這兩個數據會永久的建立關系,還會建立緩存,當無關數據改變的時候,不會重新計算而是直接使用緩存中的值。
而methods中每調用一次就會重新計算一次,為了進行不必要的資源消耗,選擇用計算屬性.
4. 初始化的時候就可以被監聽到並且計算
<template> <div> <h2>{{isMan}}</h2> </div> </template> <script> export default { data () { return { form: { baseInfo: { area: '面積', streetTown: '地區' } } } },
//根據一個現有數據去生成一個新數據,並且這兩個數據會永久的建立關系,還會建立緩存,當無關數據改變的時候,不會重新計算而是直接使用緩存中的值。
而methods中每調用一次就會重新計算一次,為了進行不必要的資源消耗,選擇用計算屬性
computed: { isMan () { return this.form.baseInfo.area && this.form .baseInfo.streetTown } } } </script> <style> </style>
watch:
1.watch 監聽的是已經在 data 中定義的變量, 當該變量變化時,會觸發 watch 中的方法
2.watcher,當需要在數據變化時執行異步或開銷較大的操作時,這時watch是非常有用的
3.watch可以進行深度監聽,監聽對象的變化。
4.只能監聽簡單數據類型,如果監聽復雜數據類型,如對象,無法監聽對象具體某個屬性。
//Vue提供了一個watch方法可以讓使用者去監聽某些data內的數據變動,觸發相應的方法,比如 data() { return { queryData: { name: '', creator: '', selectedStatus: '', time: [], }, } } // 現在我需要監聽這個queryData,我可以這樣做: watch: { queryData: { handler: function() { //do something }, deep: true } }
// 里面的deep設為了true,這樣的話,如果修改了這個queryData中的任何一個屬性,都會執行handler這個方法。不過其實這樣開銷是蠻大的,尤其是對象里面結構嵌套過深的時候。 而且有時候我們就想關心這個對象中的某個屬性,比如name,這個時候可以這樣 watch: { 'queryData.name': { handler: function() { //do something }, deep: true } }
// 或者還可以這樣巧用計算屬性 computed: { getName: function() { return this.queryData.name } } watch: { getName: { handler: function() { //do something }, } }