Angularjs 角度渲染/刷新仅在聚焦时进行

Angularjs 角度渲染/刷新仅在聚焦时进行,angularjs,Angularjs,我是一个棱角分明的新手,我正在开发一些聊天网站应用程序 最近我注意到,当用户收到来自另一个联系人的消息,并且浏览器选项卡没有焦点时,消息历史记录不会显示新消息。只有当我用鼠标按tab键并将其插回焦点时,新消息才会正确呈现 这种行为是故意的吗?如果是,是否有解决办法? 如果没有,这是一个错误,我应该朝哪个方向搜索 谢谢 Al如果您从外部AngularJS(例如Socket.io)收到消息,则需要调用$scope.apply,以便它更新您的视图 或者更好的是,您可以定义一个saveApply函数,确

我是一个棱角分明的新手,我正在开发一些聊天网站应用程序

最近我注意到,当用户收到来自另一个联系人的消息,并且浏览器选项卡没有焦点时,消息历史记录不会显示新消息。只有当我用鼠标按tab键并将其插回焦点时,新消息才会正确呈现

这种行为是故意的吗?如果是,是否有解决办法? 如果没有,这是一个错误,我应该朝哪个方向搜索

谢谢


Al

如果您从外部AngularJS(例如Socket.io)收到消息,则需要调用$scope.apply,以便它更新您的视图

或者更好的是,您可以定义一个saveApply函数,确保AngularJS不处于$digest状态,如果您在将来的版本中调用apply,它将抛出一个异常。这将是默认行为

$scope.safeApply = function(fn) {
  var phase = this.$root.$$phase;
  if(phase == '$apply' || phase == '$digest') {
    if(fn && (typeof(fn) === 'function')) {
      fn();
    }
  } else {
    this.$apply(fn);
  }
};