問題五 -- 為什麼 binding 的值有改變,畫面(DOM)卻沒有相對應的變更?
會有這樣的問題是因為 Angular 沒有察覺到數值的變化,但是其實他已經改變了。為什麼會這樣呢?這個要從一開始講起,Angular 為了讓 Data 的變更能夠即時的反應,所有的功能最後都會呼叫 這個函式,而這個函式再去 Call $scope.digest() 這個函式來檢測數值是否有變更!
基本上 Angular 原生的函式操作都不會出現這個問題,而且你也不能呼叫 $scope.$apply(),因為你不能再 $scope.$apply() 再包一個 $scope.$apply(), 這個問題只有再瀏覽器 DOM events, setTimeout, XHR(XMLHttpREquest) 或是使用第三方套件時才會發生的狀況,所以我們會需要自己使用 $scope.$apply() 來解決這個問題。
範例程式碼(用 timeout 來模擬環境)
http://codepen.io/Sandeep92/pen/fukyn
解決方法
http://codepen.io/Sandeep92/pen/bEmBn
參考資料:http://www.sitepoint.com/understanding-angulars-apply-digest/