我已经准备了一个 Plunker,其中包含我正在编写的应用程序的简化场景,该应用程序正在发生这种情况。
对场景的一点解释:
- 有一个控制器将事务列表(事务类型的对象)加载到 $scope
- 此控制器侦听由负责持久化新的或更新的 Transaction 对象的服务产生的事件,然后重新加载模型
- 视图使用 ng-repeat 渲染事务列表
- 每个事务都可以单独更新(提交或回滚)
- AngularJS 应用程序有一个 run() 块,它每 2 秒创建一个新的 Transaction 对象,模拟这些事务来自外部源(例如,对服务器的 $http 请求)
您将看到的是,当模型在接收到服务产生的事件后被重新分配新的对象列表时,不会重新加载视图。
在过去的 48 小时里,我一直在用这个把头发拉下来。这种行为的最常见原因是在 AngularJS 之外修改模型而不调用 $apply(),但是(我认为)情况并非如此。
还尝试检查 $scope.$$phase 和手动调用 $apply 或 $digest (即使这可能被认为可能很糟糕),但根本没有成功。
难道我做错了什么?这是一个错误吗?还有其他我可以应用的策略吗?