問題二 ---- $watch 和 ng-change 使用上的建議
以下網址大概簡單的範例了 $watch, ng-change, ng-click 處理 Input 欄位。
http://jsbin.com/wegiqesulise/3/edit
在實習工作的時候碰到搜尋欄位的需求,我第一時間覺得 $watch 實作起來很快很方便,但是用到後來發現有很大的問題,$watch 會監聽綁定的 ng-model 的數值情況,所以在搜尋功能製作的時候設計起來很快就可以實作起來了,後來我們有需要大量的搜尋欄位需求,所以就複製貼上,畢竟情況相同,新的搜尋欄位也很快的就也弄好了。
但是後來發現一個頗嚴重的問題,就是頁面讀取的時間越來越長,隨著欄位的增加,整個頁面的載入時間變長,後來去探討原因,發現原來 $watch 在每次頁面載入的時候都會先執行一次,所以有十個 $watch 的話,第一時間載入的時候就會觸發十個 $watch 監聽事件,導致載入的時間大幅度的增加。
另外發現如果使用者打字的速度太快,$watch 也很有可能會跟不上,原因可能是 $watch 執行效能較慢。
發現問題後,我簡單的用 ng-change 實作了一下,其實並不難,只要將 ng-model 在 function 中當參數帶入 controller 就可以使用了。結論,$watch 使用簡單,但是大量使用可能會有效能上的問題。