Angularjs 跨所有控制器的服务单例

Angularjs 跨所有控制器的服务单例,angularjs,Angularjs,如果我有以下资料: <div ng-controller="mainCtrl"> {{vm.name_from_service}} </div> .... <div ng-controller="mainCtrl"> {{vm.name_from_service}} </div> 片段#2: ng视图和下面的直接div都使用相同的服务从\u服务中检索name\u,但是name\u from\u服务只在一个地方更新 <di

如果我有以下资料:

<div ng-controller="mainCtrl">
    {{vm.name_from_service}}
</div>
....
<div ng-controller="mainCtrl">
    {{vm.name_from_service}}
</div>

片段#2:

ng视图和下面的直接div都使用相同的服务从\u服务中检索name\u,但是name\u from\u服务只在一个地方更新

 <div ng-controller="mainCtrl">
         section 1
        {{vm.name_from_service}}
 </div>

 <div id="ngviewcontainer" ng-view=""></div>

第一节
{{vm.name_from_service}}
此外,我没有使用任何异步ajax调用从_服务检索名称_,因此angular应该知道这些更改

我已经尝试使用$timeout和$apply()。没有骰子

我重构了不相关的逻辑并将其分离到一个单独的控制器中,并修复了这个问题。仍然有点困惑,为什么这两个值中只有一个在更新,尽管它们都应该来自同一个服务。

是的

singleton模式是一种限制实例化的设计模式 将一个类转换为一个对象

也可以看看几乎相同的

是的

singleton模式是一种限制实例化的设计模式 将一个类转换为一个对象


还可以查看几乎相同的

是的,它将是相同的,除非出现一些摘要周期同步问题。 在某些情况下,您可以设置如下变量:

$scope.vm.name_from_service = someservice.getName();

但是如果您使用承诺和$http调用,那么有时您必须使用$watch手动查看单例中的更改。在这种情况下,两个控制器可以具有不同的值

是的,它将是相同的,除非出现一些摘要周期同步问题。 在某些情况下,您可以设置如下变量:

$scope.vm.name_from_service = someservice.getName();

但是如果您使用承诺和$http调用,那么有时您必须使用$watch手动查看单例中的更改。在这种情况下,两个控制器可以具有不同的值

您使用的是一个控制器-mainCtrl。您的控制器可以使用多个服务。但是,不能在控制器中使用相同名称下的不同服务。是的,您使用的是相同的服务。

您使用的是一个控制器-mainCtrl。您的控制器可以使用多个服务。但是,不能在控制器中使用相同名称下的不同服务。因此,是的,您正在使用相同的服务。

在一个位置更新是什么意思?@PankajParkar更新ng view呈现的标记,但不更新第1节中标记上方的div。在一个位置更新是什么意思?@PankajParkar更新ng view呈现的标记,但不更新第1节中标记上方的div。