如何更新同一控制器的所有实例

how to update all instances of the same controller

我知道如何使用服务在控制器之间共享数据,但这种情况不同,所以请重新考虑这个问题。

我为 UI 准备了类似的东西:

<jsp:include page="../home/Header.jsp" />
<div data-ng-view></div>
<jsp:include page="../home/Footer.jsp" />

在 ng-view 中,我使用 "data-ng-controller="BuildController 作为 ctrl 实例化了一个控制器实例。它将 运行 这个函数可能需要长达 2 小时。完成后,buildCompletionMsg已更新并弹出一个框说已完成。

   self.buildServers = function(servers, version) {
        BuildService.buildList(servers, version).then(
            function(data) {
                self.buildCompletionMsg = data;
                $('#confirmationModal').modal('show');
            },
            function(errResponse) {
                console.error("Error getting servers." + errResponse);
            }
        );
    };

问题是我希望模式位于 Header.jsp 文件中,因此无论用户在哪个视图中,他们都会看到通知。因此在 Header.jsp 我有另一个控制器实例使用 "data-ng-controller="BuildController 作为 ctrl" 并使用

绑定它
<div data-ng-controller="BuildController as ctrl">
   <div class="modal fade" id="confirmationModal" role="dialog" aria-labelledby="confirmLabel">
    <div class="modal-dialog modal-lg" role="document">
        <div class="modal-content">
            <div class="modal-body">
                <h3>{{ ctrl.buildCompletionMsg }}</h3>
            </div>          
        </div>
    </div>
  </div>
</div>

如你所见,即使我做了类似的事情:

  self.buildCompletionMsg = BuildService.getCompletionMsg();

只会更新ng-view页面的ctrl实例,Header.jsp里面的还是null

如何更新不同页面中的所有 BuildController 实例或仅更新 Header.jsp 文件中的实例?

我找到了我自己问题的答案。解决方案是在服务中有一个对象引用或数组(它不适用于简单的字符串),如下所示:

angular.module('buildModule').factory('BuildService', ['$http', '$q', function($http, $q) {

  var self = {};
  self.completionStatus = { data: "" };

然后在 $http 成功后更新 completionStatus

self.status.data = response.data;

而在controller中,变量直接设置为这个对象

  self.buildCompletionMsg = BuildService.completionStatus; 

这会更新所有页面上的变量 {{ buildCompletionMsg }}。