我一直在开发一个简单的AngularJS App。我需要实现名为' countryservice'的自定义服务。为了它。以下是我的代码。
var countryApp = angular.module('countryApp', []);
countryApp.service('countryservice', function ($http) {
this.getallcountries = function ($http) {
$http.get('js/countries.json').success(function (data) {
return data;
});
}
});
countryApp.controller('CountryCtrl', function ($http, $scope, countryservice) {
$scope.countries = countryservice.getallcountries($http);
});
不幸的是,此代码由于某种原因无法运行。但无法弄清楚为什么。当我在不创建自己的自定义服务的情况下执行相同操作时,它可以正常工以下是未实现自定义服务的代码。这个工作正常。
var countryApp = angular.module('countryApp', []);
countryApp.controller('CountryCtrl', function ($scope, $http) {
$http.get('js/countries.json').success(function (data) {
$scope.countries = data;
});
});
任何人都可以帮助我解决我的自定义服务出错的问题吗?
答案 0 :(得分:4)
getallcountries
服务方法应该返回$http.get
生成的承诺,如下所示:
var countryApp = angular.module('countryApp', []);
countryApp.service('countryservice', function ($http) {
this.getallcountries = function () {
return $http.get('js/countries.json');
}
});
countryApp.controller('CountryCtrl', function ($scope, countryservice) {
countryservice.getallcountries().success(function(data) {
$scope.countries = data;
});
});
另外,请注意,您不必向控制器注入$http
服务。
答案 1 :(得分:2)
尝试尝试一下:
countryApp.service('countryservice', function ($http) {
this.getallcountries = function () {
return $http.get('js/countries.json');
}
});
控制器中的:
countryApp.controller('CountryCtrl', function ($scope, countryservice) {
countryservice.getallcountries().then(function(resp) {
$scope.countries = resp.data;
})
});
答案 2 :(得分:1)
尝试在$ http
之前返回countryApp.service('countryservice', function ($http) {
this.getallcountries = function ($http) {
return $http.get('js/countries.json').success(function (data) {
return data;
});
}
});
然后在控制器中
countryApp.controller('CountryCtrl', function ($scope, countryservice) {
countryservice.getallcountries().then(function(resp) {
$scope.countries = resp.data;
})
});
答案 3 :(得分:0)
countryApp.service('countryservice', function ($http) {
var service = {};
service.getallcountries = function ($http) {
var response;
$http.get('js/countries.json').success(function (data) {
response = data;
});
return response;
}
return service;
});
这与我的做法类似。