如何更新同一控制器的所有实例
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 }}。
我知道如何使用服务在控制器之间共享数据,但这种情况不同,所以请重新考虑这个问题。
我为 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 }}。