Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS和WebSocket:回调函数需要$scope.$apply()才能工作_Javascript_Angularjs_Websocket - Fatal编程技术网

Javascript AngularJS和WebSocket:回调函数需要$scope.$apply()才能工作

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 }; 这种行为的原因是

我正在使用AngularJS和电话网络服务通过WebSocket拨打电话。
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的位置。

可能重复的