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()方法時,所有偵聽廣播的控制器都將被更新。 –