在angular的自定義回調中操作$scope


 

在angular的controller中有時候會使用到自定義的回調,

比如異步請求的回調函數

一般返回之后都需要更新頁面的數據,即更新$scope.xx

 

但是如果直接 $scope.xx = data.info

這樣根本不會有任何的影響

解決方案

this.callback = function (status) {
    $scope.$apply(function () {
        $scope.xx = status;
    });
};
 
Scope提供$watch方法監視Model的變化。
Scope提供$apply方法傳播Model的變化。
 

在$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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM