亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Vue $watch 死循環問題

Vue $watch 死循環問題

慕無忌1623718 2018-09-04 13:23:02
如果watch中的兩個data變量相互調用了,會發生死循環。watch:{    'a':{         handler:function(val,oldVal){            if(this.b == 0){                this.b = 1;             }else{                this.b = 0;             }         },         deep:true     },    'b':{         handler:function(val,oldVal){            if(this.a == 0){                this.a = 1;             }else{                this.a = 0;             }         },         deep:true     }, }類似于這樣,監聽當a改變了去改變b,監聽當b改變了去改變a。這樣的話a和b會一直死循環下去,是在寫全選、反選的時候遇到這個問題,當用戶勾選全選后,再取消勾選一個條目,全選也會相對應取消勾選,這樣就一直死循環下去了。vue提供了相關的api解決這個問題嗎?我在官網沒有找到。
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

雖然不知道你的實際開發需求是什么?但是你的程序在邏輯上就是你自己分析的死循環。 
watch是監控對象屬性值的變化,即是你的ab對應的值的變化了會回調觸發這個監控函數下對應的鍵名表達式函數,函數會傳入兩個參數,一個是變化后的值,一個是變化前的值。
如何解決這個問題?
其實我也沒想到好的辦法,腦海里面一直是個死循環。要么就是數據單向,輸入事件觸發,但當前值的變化與否對實際結果不影響。a的變化結果不關心,只是關心它變化了會觸發b。但是下一次a怎么判斷它的變化又是問題了。

還有一種就是固定判斷零點值,b = 0b = 1兩個極端條件,同理a也一樣。

a: function() {    this.b == this.b == 0 ? 1 : (this.b == 1 ? 0 : 1);
}

前提條件是:a不能等于0或者1,否則又會觸發死循環


查看完整回答
反對 回復 2018-10-28
  • 1 回答
  • 0 關注
  • 2672 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號