在angular的controller中有時候會使用到自定義的回調,
比如異步請求的回調函數
一般返回之后都需要更新頁面的數據,即更新$scope.xx
但是如果直接 $scope.xx = data.info
這樣根本不會有任何的影響
解決方案
this.callback = function (status) { $scope.$apply(function () { $scope.xx = status; }); };
在$scope.$apply()方法里面,它會去調用$scope.$digest()方法。$scope.$apply()方法帶一個函數或者一個表達式,然后執行它,最后調用$scope.$digest()方法去更新bindings或者watchers。
那我們到底什么時候需要去調用$apply()方法呢?
情況非常少,實際上幾乎我們所有的代碼都包在$scope.$apply()里面,像ng-click,controller的初始化,$http的毀掉函數等。
在這些情況下,我們不需要自己調用,實際上我們也不能自己調用,否則在$apply()方法里面再調用$apply()方法會拋出錯誤。
如果我們需要在一個新的執行序列中運行代碼時才真正需要用到它,而且當且僅當這個新的執行序列不是被angular JS的庫的方法創建的,這個時候我們需要將代碼用$scope.$apply()包起來。
回調相當於一個新的執行序列,所以當需要刷新綁定的時候,需要調用到它。
參考:
http://www.2cto.com/kf/201311/256848.html
http://stackoverflow.com/questions/20318401/how-to-access-my-angular-scope-inside-my-custom-callback