1

我已经准备了一个 Plunker,其中包含我正在编写的应用程序的简化场景,该应用程序正在发生这种情况。

对场景的一点解释:

  • 有一个控制器将事务列表(事务类型的对象)加载到 $scope
  • 此控制器侦听由负责持久化新的或更新的 Transaction 对象的服务产生的事件,然后重新加载模型
  • 视图使用 ng-repeat 渲染事务列表
  • 每个事务都可以单独更新(提交或回滚)
  • AngularJS 应用程序有一个 run() 块,它每 2 秒创建一个新的 Transaction 对象,模拟这些事务来自外部源(例如,对服务器的 $http 请求)

您将看到的是,当模型在接收到服务产生的事件后被重新分配新的对象列表时,不会重新加载视图。

在过去的 48 小时里,我一直在用这个把头发拉下来。这种行为的最常见原因是在 AngularJS 之外修改模型而不调用 $apply(),但是(我认为)情况并非如此。

还尝试检查 $scope.$$phase 和手动调用 $apply 或 $digest (即使这可能被认为可能很糟糕),但根本没有成功。

难道我做错了什么?这是一个错误吗?还有其他我可以应用的策略吗?

4

1 回答 1

2

setInterval也是“在 Angular 之外”,我不确定您是否尝试在那里使用 $apply。如果您将transactions.persist(t);app.js 中的内容包装在其中,$rootScope.$apply()您将看到列表每两秒刷新一次。“COMMIT”和“ROLL BACK”按钮产生的变化也会立即显示出来。

工作计划

于 2013-05-29T15:53:25.527 回答