Javascript AngularJS和WebSocket:回调函数需要$scope.$apply()才能工作
我正在使用AngularJS和电话网络服务通过WebSocket拨打电话。Javascript AngularJS和WebSocket:回调函数需要$scope.$apply()才能工作,javascript,angularjs,websocket,Javascript,Angularjs,Websocket,我正在使用AngularJS和电话网络服务通过WebSocket拨打电话。 web服务有几个回调,例如Phone.onIncomingCall 当我使用此函数设置$scope变量时,视图不会自动更新,除非我立即使用$scope.$apply Phone.onIncomingCall = function(){ $scope.myVar = "newValue"; $scope.$apply(); // only works if I call this line }; 这种行为的原因是
web服务有几个回调,例如
Phone.onIncomingCall
当我使用此函数设置$scope
变量时,视图不会自动更新,除非我立即使用$scope.$apply
Phone.onIncomingCall = function(){
$scope.myVar = "newValue";
$scope.$apply(); // only works if I call this line
};
这种行为的原因是什么(是预期的)以及是否有办法在每个函数中使用
$scope.apply()
?这是预期的行为,angular在内部就是这样工作的
我建议如下:
Phone.onIncomingCall = function () {
$scope.$apply(function () {
$scope.myVar = 'newValue';
});
}
这是预期的行为,angular内部就是这样工作的 我建议如下:
Phone.onIncomingCall = function () {
$scope.$apply(function () {
$scope.myVar = 'newValue';
});
}
Angular“不知道”您对范围变量所做的更新,因为您是从Angular上下文之外更新它的。从以下文件:
$apply()用于从外部以角度执行表达式
角度框架。(例如,从浏览器DOM事件,
setTimeout、XHR或第三方库)。因为我们正在召唤
我们需要的角度框架执行适当的生命周期范围
异常处理,执行监视
通过在作用域上运行$apply
,将从$rootScope
调用$digest
,这将触发在$scope.myVar
上注册的任何$watch
ER。在这种情况下,如果您通过插值在视图中使用变量,这就是注册$watch
er的位置。Angular“不知道”您对范围变量所做的更新,因为您是从Angular上下文之外对其进行更新的。从以下文件:
$apply()用于从外部以角度执行表达式
角度框架。(例如,从浏览器DOM事件,
setTimeout、XHR或第三方库)。因为我们正在召唤
我们需要的角度框架执行适当的生命周期范围
异常处理,执行监视
通过在作用域上运行$apply
,将从$rootScope
调用$digest
,这将触发在$scope.myVar
上注册的任何$watch
ER。在这种情况下,如果您通过插值在视图中使用变量,这就是注册$watch
er的位置。可能重复的