Angular仅在聚焦时呈现/刷新

时间:2014-10-13 04:41:09

标签: angularjs

我是Angular新手,我正在开发一些聊天网站应用程序。

最近我注意到,当用户收到来自其他联系人的消息,并且浏览器选项卡未聚焦时,消息历史记录不会显示新消息。只有当我用鼠标按下标签并将其重新插入焦点时才能正确呈现新消息。

这种行为是否符合设计要求?如果有,是否有解决方法? 如果不是,这是一个错误,我应该在哪个方向搜索?

谢谢!

的Al

1 个答案:

答案 0 :(得分:0)

如果您是从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);
  }
};