AngularJS服务无法正常工作

时间:2015-12-04 14:25:23

标签: angularjs angularjs-service

我一直在开发一个简单的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;
  });
});

任何人都可以帮助我解决我的自定义服务出错的问题吗?

4 个答案:

答案 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;
});

这与我的做法类似。