注意:我也在以下AngularJS邮件列表中发布了此问题:https ://groups.google.com/forum/#! topic/ angular/UC8_pZsdn2U
大家好,
我正在构建我的第一个AngularJS应用,并且对Javascript不太熟悉,因此任何指导都将不胜感激:)
我的应用程序有两个控制器,ClientController和CountryController。在CountryController中,我正在从使用$ resource对象的CountryService检索国家列表。这工作正常,但我希望能够与ClientController共享国家/地区列表。经过一些研究,我读到我应该使用CountryService来存储数据并将该服务注入两个控制器中。
这是我以前的代码:
CountryService:
services.factory('CountryService', function($resource) { return $resource('http://localhost:port/restwrapper/client.json', {port: ':8080'}); });
CountryController:
//Get list of countries //inherently async query using deferred promise $scope.countries = CountryService.query(function(result){ //preselected first entry as default $scope.selected.country = $scope.countries[0]; });
在我更改之后,它们如下所示:
services.factory('CountryService', function($resource) { var countryService = {}; var data; var resource = $resource('http://localhost:port/restwrapper/country.json', {port: ':8080'}); var countries = function() { data = resource.query(); return data; } return { getCountries: function() { if(data) { console.log("returning cached data"); return data; } else { console.log("getting countries from server"); return countries(); } } }; });
$scope.countries = CountryService.getCountries(function(result){ console.log("i need a callback function here..."); });
问题是我曾经能够使用$ resource.query()中的回调函数来预先选择默认选择,但是现在我将query()调用移到了CountryService内,我似乎丢失了什么。
解决此问题的最佳方法是什么?
感谢您的帮助,肖恩
Ok..so看起来我通过将回调函数一直传递到resource.query()调用解决了问题。仍不确定这是否是最佳方法。
供参考,这是我所做的:
$scope.countries = CountryService.getCountries(function(){ //preselected default $scope.selected.country = $scope.countries[0]; });
//Country Service. Will contain all relevant rest methods here services.factory('CountryService', function($resource) { var countryService = {}; var data; var resource = $resource('http://localhost:port/restwrapper/country.json', {port: ':8080'}); var countries = function(callback) { data = resource.query(callback); return data; } return { getCountries: function(callback) { if(data) { console.log("returning cached data"); return data; } else { console.log("getting countries from server"); return countries(callback); } } }; });