使用诺言在控制器之间共享数据? [英] Sharing data between controllers using promises?
问题描述
好的,我在服务中具有此功能:
Okay, I have this function in a service:
wikiServices = angular.module('wikiServices', []);
wikiServices.factory('newsService', function($http, $q){
var chosenNewsStory = "";
var getNewsStory = function(news_id, callback){
var deferred = $q.defer();
$http({
method: "GET",
url: "news/article/" + news_id
})
.success(function(newsStory){
deferred.resolve(newsStory);
console.log("RESOLVED " + newsStory);
});
return deferred.promise;
});
控制器1:
wikiControllers = angular.module('wikiControllers', []);
wikiControllers.controller('ctrl1', ['$scope', 'newsService',
function($scope, newsService){
$scope.getNewsStory = newsService.getNewsStory(function(input){
newsService.getNewsStory(news_id);
};
});
控制器2:
wikiControllers = angular.module('wikiControllers', []);
wikiControllers.controller('ctrl1', ['$scope', 'newsService',
$scope.watch('newsService.chosenNewsStory', function(newVal){
console.log(newVal);
});
});
现在,我尝试在很多地方在服务中设置"chosenNewsStory",但我想我缺少了整个JS的关键部分-体验".
Now, I have tried setting "chosenNewsStory" in the service a lot of places buyt I think I'm missing a key part of the whole JS-"experience".
我在将服务中的"var selectedNewsStory"设置为从服务器获取的newsStory时遇到麻烦.我该怎么办?
I'm having trouble setting "var chosenNewsStory" in the service to the newsStory fetched from the server. How can I do this?
谢谢.
推荐答案
您应该为要共享的变量定义 get
和 set
方法,并将其返回为好吧.我会这样格式化您的服务:
You should define get
and set
methods for the variable that is being shared, and return these as well. I would format your service like so:
wikiServices.factory('newsService', function($http, $q){
var chosenNewsStory = "";
return {
getNewsStory: function(news_id, callback){
var deferred = $q.defer();
$http({
method: "GET",
url: "news/article/" + news_id
}).success(function(newsStory){
deferred.resolve(newsStory);
console.log("RESOLVED " + newsStory);
});
return deferred.promise;
},
getNews: function() {
return chosenNewsStory;
},
setNews: function(story) {
chosenNewsStory = story;
}
}
});
现在,您将可以观看 newsService.getNews()
并使用 newsService.setNews(news)
Now you will be able to watch newsService.getNews()
and set it with newsService.setNews(news)
这篇关于使用诺言在控制器之间共享数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!