我知道如何使用服务在控制器之间共享数据,但这种情况有所不同所以请重新考虑这个问题。
UI有这样的东西:
<jsp:include page="../home/Header.jsp" />
<div data-ng-view></div>
<jsp:include page="../home/Footer.jsp" />
在ng-view中,我使用&#34; data-ng-controller =&#34; BuildController作为ctrl&#34;来实例化一个控制器实例。它将运行此功能,可能需要长达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中我有另一个控制器实例使用&#34; data-ng-controller =&#34; BuildController as ctrl&#34;并使用
绑定它<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文件中的实例?
答案 0 :(得分:0)
我找到了自己问题的答案。解决方案是在服务中有一个对象引用或数组(它不适用于简单的字符串),如下所示:
angular.module('buildModule').factory('BuildService', ['$http', '$q', function($http, $q) {
var self = {};
self.completionStatus = { data: "" };
然后在$ http成功更新completionStatus
self.status.data = response.data;
在控制器中,变量直接设置为此对象
self.buildCompletionMsg = BuildService.completionStatus;
这会更新所有页面上的变量{{buildCompletionMsg}}。