1
经过大量研究,我发现了以下答案,它与我的代码紧密匹配,并清楚地说明了如何使用共享服务(使用缓存和承诺)在控制器之间共享数据。Angularjs使用共享服务自动刷新控制器
https://stackoverflow.com/a/17472995/2341148
然而,这个答案(和所有其他我能找到的)不显示如何保持每个控制器同步。当某个控制器中的某些内容发生变化时,我希望其他控制器重新加载/刷新其数据。
例如,控制器“test”向服务器提交一些数据以更新用户名。现在控制器“test1”显示一个不同的名称,因为它有自己的作用域。可以做些什么来使“test1”重新加载服务以获取最新数据(无需刷新整个页面)?
有人可以扩展此代码以使测试在test1更改数据时重新加载服务吗?
var app = angular.module('plunker', []);
app.service('cache', function ($http,$q) {
var mycache={};
return {
getdata: function (key) {
var deferred = $q.defer();
if (mycache[key]) {
deferred.resolve(mycache[key]);
}
else {
$http.get('TextFile.txt').then(function (data) {
mycache[key] = data.data;
deferred.resolve(mycache[key]);
});
}
return deferred.promise;
}
}
});
app.controller('test', function ($scope, cache) {
cache.getdata('cache').then(function (data) {
$scope.data = data;
});
});
app.controller('test1', function ($scope, cache) {
//since data is already cached now it will server the cached data
cache.getdata('cache').then(function (data) {
$scope.data = data;
});
});
谢谢你的分享。我不知道如何进入我发布的代码,但似乎相关的位是“$广播”和“$上”。该服务可以在每次调用它时向控制器广播。没有一种自动或简单的方式让您的控制器在Angularjs中重新加载? – user2341148
这显示了如何使用服务中的$ broadcast更新控制器。每次调用服务的set()方法时,所有侦听广播的控制器都将被更新。 –