如果我有以下内容:
<div ng-controller="mainCtrl">
{{vm.name_from_service}}
</div>
....
<div ng-controller="mainCtrl">
{{vm.name_from_service}}
</div>
让我们说它们都从工厂/服务中提取name_from_service值,假设在两个mainCtrl控制器实例中使用相同的服务单例是否正确?
请注意,mainCtrl使用了两次。
控制器代码段:
$scope.vm.name_from_service = someservice.getName();
Snippet#2:
下面的ng-view和immediate div都使用相同的服务来检索name_from_service,但是name_from_service只在一个地方更新。
<div ng-controller="mainCtrl">
section 1
{{vm.name_from_service}}
</div>
<div id="ngviewcontainer" ng-view=""></div>
此外,我没有使用任何异步ajax调用来检索name_from_service,因此angular应该知道这些更改。
我尝试过使用$ timeout和$ apply()。没有骰子 。
我重构并将不相关的逻辑分离到一个单独的控制器中并修复了问题。仍然有点困惑,为什么这两个值中只有一个在晚上更新,尽管两者都应该从相同的服务中提取。
答案 0 :(得分:2)
是的,它会是相同的,除非一些摘要周期同步问题。 在某些情况下,您可以设置如下变量:
$scope.vm.name_from_service = someservice.getName();
但是如果你使用promises和 $ http 来电,那么有时候你必须使用$ watch手动观察单身人士的变化。这是两个控制器可以具有不同值的情况。
答案 1 :(得分:1)
答案 2 :(得分:1)
您正在使用一个控制器 - mainCtrl。您的控制器可以使用多种服务。但是,您不能在控制器中使用相同名称的不同服务。所以,是的,您正在使用相同的服务。