【问题标题】:AngularJS and WebSockets: Callback function needs $scope.$apply() to workAngularJS 和 WebSockets:回调函数需要 $scope.$apply() 才能工作
【发布时间】:2014-07-27 21:13:38
【问题描述】:

我正在使用 AngularJS 和电话网络服务通过 WebSockets 拨打电话。
web服务有几个回调如Phone.onIncomingCall

当我使用此函数设置$scope 变量时,视图不会自动更新,除非我之后立即使用$scope.$apply

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

这种行为的原因是什么(这是预期的),有没有办法在每个函数中使用$scope.apply()

【问题讨论】:

标签: javascript angularjs websocket


【解决方案1】:

Angular“不知道”您对范围变量所做的更新,因为您是从 Angular 上下文之外对其进行更新的。来自$apply 的文档:

$apply() 用于从外部以角度执行表达式 角度框架。 (例如来自浏览器 DOM 事件, setTimeout、XHR 或第三方库)。因为我们正在呼唤 我们需要执行适当的范围生命周期的角度框架 异常处理,执行手表。

通过在作用域上运行$apply,从$rootScope 调用$digest,这将触发在$scope.myVar 上注册的任何$watchers。在这种情况下,如果您通过插值在视图中使用变量,这就是注册 $watcher 的位置。

【讨论】:

    【解决方案2】:

    这是预期的行为,角度在内部是这样工作的。

    我推荐以下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多