3 回答

TA貢獻1860條經驗 獲得超9個贊
通俗來講,
computed是在HTML DOM加載后馬上執行的,如賦值;
而methods則必須要有一定的觸發條件才能執行,如點擊事件;
watch呢?它用于觀察Vue實例上的數據變動。對應一個對象,鍵是觀察表達式,值是對應回調。值也可以是方法名,或者是對象,包含選項。
所以他們的執行順序為:默認加載的時候先computed再watch,不執行methods;等觸發某一事件后,則是:先methods再watch。
下面的例子可以做為說明。
computed 屬性 vs watched 屬性:Vue 確實提供了一種更通用的方式來觀察和響應 Vue 實例上的數據變動:watch 屬性。當你有一些數據需要隨著其它數據變動而變動時,你很容易濫用 watch——特別是如果你之前使用過 AngularJS。然而,通常更好的想法是使用 computed 屬性而不是命令式的 watch 回調。

TA貢獻1845條經驗 獲得超8個贊
1、methods是個方法,比如你點擊事件要執行一個方法,這時候就用methods,
2、computed是計算屬性,實時響應的,比如你要根據data里一個值隨時變化做出一些處理,就用computed。
3、舉一個例子幫助理解:
1)<div id="root">;
2) </div>;
3) <script> var vm = new Vue({ el: '#root', data:data, methods:{
4)method_now(){ return Date.now();} },
5)computed:{
6)computed_now: function () { return Date.now();}} })
7)</script>
4、控制臺訪問:
1)$vm0.computed_now;
2)1491741921719$vm0.computed_now;
3)1491741921719$vm0.computed_now;
4)1491741921719$vm0.computed_now;
5)1491741921719$vm0.method_now;
6)()1491741949941$vm0.method_now;
7)()1491741950734$vm0.method_now;
8)()1491741951445$vm0.method_now;
9)()1491741952117。
5、methods是方法和原生js沒區別,大多是需要我們主動調用(比如事件)。
6、computed是get 這個get有點特殊,只要觸發所依賴數據的set會自動觸發get。我們只關心get的return set由系統觸發或者依賴的數據觸發,官方說依賴緩存只是為了理解。其實Date.now()這種只是系統不能觸發set,不能觸發set get當然不會通知觀察者。
7、watch 是set 由data觸發,我們可以在set里進行自己的條件封裝。
添加回答
舉報