Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS因事件更改模型后不刷新视图_Javascript_Events_View_Angularjs_Model - Fatal编程技术网

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请求)
您将看到,当接收到服务生成的事件后,使用对象的新列表重新分配模型时,不会重新加载视图

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

还尝试检查$scope.$$phase和手动调用$apply或$digest(即使这可能被认为是不好的),但没有成功


我做错什么了吗?这是虫子吗?还有什么其他策略可以应用吗?

setInterval
也是“角度之外”,我不确定您是否尝试在那里使用$apply。如果您包装
事务。持久化(t)
在app.js中,
$rootScope.$apply()
您将看到列表每两秒钟刷新一次。“提交”和“回滚”按钮产生的更改也会立即显示


当您点击“手动刷新”按钮时,会发生什么情况?我想您已经通过下面的答案找到了答案。。。无论如何,这个按钮会强制重新加载模型(因为当事件发生时它不会这样做),谢谢你的回答。setInterval确实在AngularJS之外。在设计场景时没有想到这一点。在我真正的应用程序中,没有设置间隔,我将尝试修改它以删除它们,并以其他方式模拟新对象。结果证明你是对的,你已经给了我我需要的线索。我运行了一些其他不相关的时间间隔,即使它们与遇到此问题的进程没有任何关系,只要我将它们的代码包装到$rootScope中就可以了。$apply():)