在调试中看到的$ scope.eventi是searchCtrl中的一个,而不是mainCtrl中的一个。要更新mainCtrl $
scope.eventi,您必须找到其他方法。
一个干净但漫长的解决方案将是使用服务在控制器中共享变量。
要在评论中回答问题:
我可以看到它已更新,但视图仍显示旧数据
我想是什么问题(即使我实际上没有看到您的代码)。
问题
如果您这样绑定var:
服务
[...]service.serviceVar = 1;return service[...]
这将创建一个带有引用的“ 1”变量。
控制者
[...] $scope.myvar = Service.serviceVar; [...]
这会将$ scope.myvar绑定到“ 1”引用。
如果在服务或其他控制器中执行此操作:
service.serviceVar = 2;
您将使用新引用创建一个新的变量“ 2”,并将该引用分配给service.serviceVar。严重的是,您对旧的1 var的所有旧引用都不会更新。
解
为了避免这种情况,请执行以下操作:
服务
[...]service.servicevar = {};service.servicevar.value = 1;return service[...]使用新引用创建一个对象,并将其分配给servicevar。您创建一个变量“ 1”,并将其分配给servicevar.value。
控制者
[...]$scope.myvar = Service.servicevar;[...]
您将servicevar引用分配给您的范围var。
视图
{{myvar.value}}您可以通过使用var的属性来使用该值。
更新var这样做:
service.servicevar.value = 2;
您将使用新参考创建新的变量“ 2”,并用该参考替换旧参考。
但是这次您将所有对servicevar的引用保留在控制器中。
我希望我很清楚,它可以回答您的问题。
编辑:
尝试永远不要使用$ scope。$
apply。这是一个非常糟糕的做法。如果您使用它来使某些东西起作用,那么您可能应该找到另一个来做到这一点(这对Stacks来说是一个很大的问题,我想:“为什么我需要$
apply解决我的问题XXXXX”)
rsnorman15关于您使用异步调用有一个很好的观点。也看看他的答案。
这是我使用服务共享房屋的老手之一



