Javascript AngularJS因事件更改模型后不刷新视图
我准备了一个应用程序的简化场景,我正在编写这个场景 对该场景的一点解释:Javascript AngularJS因事件更改模型后不刷新视图,javascript,events,view,angularjs,model,Javascript,Events,View,Angularjs,Model,我准备了一个应用程序的简化场景,我正在编写这个场景 对该场景的一点解释: 有一个控制器将事务列表(类型为Transaction的对象)加载到$scope中 此控制器侦听由负责持久化新的或更新的事务对象的服务生成的事件,然后重新加载模型 该视图使用ng repeat呈现事务列表 每个事务都可以单独更新(提交或回滚) AngularJS应用程序有一个run()块,它每2秒创建一个新的事务对象,模拟这些事务来自外部源(例如,针对服务器的$http请求) 您将看到,当接收到服务生成的事件后,使用对象
- 有一个控制器将事务列表(类型为Transaction的对象)加载到$scope中
- 此控制器侦听由负责持久化新的或更新的事务对象的服务生成的事件,然后重新加载模型
- 该视图使用ng repeat呈现事务列表
- 每个事务都可以单独更新(提交或回滚)
- AngularJS应用程序有一个run()块,它每2秒创建一个新的事务对象,模拟这些事务来自外部源(例如,针对服务器的$http请求)
我做错什么了吗?这是虫子吗?还有什么其他策略可以应用吗?
setInterval
也是“角度之外”,我不确定您是否尝试在那里使用$apply。如果您包装事务。持久化(t)
在app.js中,$rootScope.$apply()
您将看到列表每两秒钟刷新一次。“提交”和“回滚”按钮产生的更改也会立即显示
当您点击“手动刷新”按钮时,会发生什么情况?我想您已经通过下面的答案找到了答案。。。无论如何,这个按钮会强制重新加载模型(因为当事件发生时它不会这样做),谢谢你的回答。setInterval确实在AngularJS之外。在设计场景时没有想到这一点。在我真正的应用程序中,没有设置间隔,我将尝试修改它以删除它们,并以其他方式模拟新对象。结果证明你是对的,你已经给了我我需要的线索。我运行了一些其他不相关的时间间隔,即使它们与遇到此问题的进程没有任何关系,只要我将它们的代码包装到$rootScope中就可以了。$apply():)