2013-05-29 40 views
1

我编写a Plunker简化了一个应用程序场景,我正在编写这种情况。AngularJS在模型更改后不会令人耳目一新的视图

场景的一点解释:

  • 没有加载到$范围的交易列表(类型交易的对象)
  • 该控制器监听由服务产生的事件控制器负责持久化新的或更新的交易对象,然后重新加载模型
  • 该视图使用ng重复呈现交易列表
  • 每个交易可以单独更新(提交或回滚)
  • 的AngularJS应用程序有创建一个新的事务对象每隔2秒,模拟的是,这些交易都来自外部源(针对服务器的$ HTTP请求,例如)一个run()块

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

我一直在拖着我的头发脱离过去的48小时。这种行为最常见的原因是在AngularJS之外修改模型,而不是调用$ apply(),但是(我认为)并非如此。

还尝试检查$范围。$$阶段和调用手动$应用或$摘要(即使这可能被认为可能是坏的),根本没有成功。

我做错了什么?这是一个错误?有没有其他策略可以应用?

+0

什么假设发生时,你打一个“手动刷新”按钮? – Stewie

+0

我想你已经通过下面的答案计算出来了......无论如何,这个按钮强制重新加载模型(因为当事件发生时它没有这样做) – ggalmazor

回答

2

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

Working plnkr

+0

感谢您的回答。确实,setInterval会在AngularJS之外。设计场景时没有想到它。在我的真实应用程序中,没有setIntervals,我会尝试修改它以删除它们并以其他方式模拟新对象。 – ggalmazor

+0

事实证明,你是对的,你已经给我我需要的线索。我有一些其他无关的时间间隔正在运行,即使它们与遇到此问题的进程没有任何关系,只要我将它们的代码修复到$ rootScope中即可。$ apply():) – ggalmazor

相关问题