2014-06-06 50 views
1

我正在使用AngularJS和電話Web服務通過WebSockets進行調用。
Web服務有一些回調,如Phone.onIncomingCall

當我使用這個功能設置$scope變量視圖不會自動除非我以後正確使用$scope.$apply更新。

Phone.onIncomingCall = function(){ 
    $scope.myVar = "newValue"; 
    $scope.$apply(); // only works if I call this line 
}; 

什麼是這種現象的原因(是否預期),並有在左右各功能使用$scope.apply()的方法嗎?

+0

可能重複的[視圖不更新在AngularJS](http://stackoverflow.com/questions/10179488/the-view-is-not-updated-in-angularjs) –

回答

3

角是更新您所做的範圍變量的「不知道」,因爲你從角上下文之外進行更新。從文檔爲$apply

$申請()是用來從 角框架之外在角度來執行的表達式。 (例如,來自瀏覽器DOM事件, setTimeout,XHR或第三方庫)。因爲我們正在調用 角度框架,我們需要執行適當的範圍生命週期 異常處理,執行手錶。

通過在範圍運行$apply$digest$rootScope,這將觸發$scope.myVar註冊的任何$watch ERS調用。在這種情況下,如果您通過插值在視圖中使用變量,則這是從其註冊的位置。

1

這是預期的行爲,角度工程就像內部。

我提出以下建議:

Phone.onIncomingCall = function() { 
    $scope.$apply(function() { 
     $scope.myVar = 'newValue'; 
    }); 
} 
相關問題