AngularJS在模型因事件而改变后不刷新视图

AngularJS not refreshing view after model changed as result of an event

本文关键字:刷新 新视图 改变 模型 事件 AngularJS      更新时间:2023-09-26

我准备了一个普朗克与一个应用程序的简化场景,我正在编码的地方,这是发生的。

对场景的一点解释:

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

你将看到的是,当接收到服务产生的事件后,用一个新的对象列表重新分配模型时,没有重新加载视图。

在过去的48小时里,我一直在为这个烦恼。这种行为最常见的原因是修改了AngularJS外部的模型,而不是调用$apply(),但(我认为)这不是情况。

也尝试检查$scope。$$phase和手动调用$apply或$digest(即使这可能被认为是潜在的错误),但根本没有成功。

我做错了什么吗?这是臭虫吗?我还有什么别的办法吗?

setInterval也是"在Angular之外",我不确定你是否尝试过在那里使用$apply。如果你把transactions.persist(t);包装在app.js中的$rootScope.$apply()中,你会看到列表每两秒刷新一次。"COMMIT"answers"rollback"按钮产生的更改也会立即显示。

工作plnkr