2014-06-06 27 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'; 
    }); 
} 
相关问题