注意:我还在 AngularJS 邮件列表中发布了这个问题:https ://groups.google.com/forum/#!topic/angular/UC8_pZsdn2U
大家好,
我正在构建我的第一个 AngularJS 应用程序,并且对 Javascript 不是很熟悉,因此非常感谢任何指导:)
我的应用程序有两个控制器,ClientController 和 CountryController。在 CountryController 中,我从使用 $resource 对象的 CountryService 检索国家列表。这很好用,但我希望能够与 ClientController 共享国家/地区列表。经过一番研究,我读到我应该使用 CountryService 来存储数据并将该服务注入两个控制器。
这是我之前的代码:
国家服务:
services.factory('CountryService', function($resource) {
return $resource('http://localhost:port/restwrapper/client.json', {port: ':8080'});
});
国家控制器:
//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 中,我似乎失去了什么.
解决这个问题的最佳方法是什么?
谢谢你的帮助,肖恩