AngularJS将服务注入控制器

时间:2015-12-16 07:30:03

标签: angularjs angularjs-service

我收到了未知提供商

Error: [$injector:unpr] http://errors.angularjs.org/1.4.8/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20RfcDataService

使用以下代码。有人可以指导我这里有什么问题吗?

    var RFC = angular.module('rfcApp', []);

    RFC.service('RfcDataService', function($scope, $http) {
      this.getUserData = function($http) {
          $http.get("http://myserver:8080/UserPrefs?jid=fcc").then(function(response) {
            return response.data;
          });
      };
      this.getHomeData = function($scope) {
        angular.forEach($scope.rfcData, function(singleItem) {
            if (singleItem.dataFor === 'Home') {
              $scope.homeTabs = (singleItem.tabs);
            }
        });
      };
    }

    RFC.controller('RfcMainController', ['$scope', '$http', '$sce', 'RfcDataService', function($scope, $http, $sce, RfcDataService) {
      $scope.rfcData = RfcDataService.getUserData($http);
      RfcDataService.getHomeData($scope);
    }

2 个答案:

答案 0 :(得分:2)

首先:

  • $http功能中移除getUserData - 它已经在范围内,无论如何您的服务功能都无法注入。

  • 如果您使用查询字符串参数调用$http,则将其作为第二个参数传递

您的getUserData函数应该返回一个承诺:

  this.getUserData = function() {
      return $http.get("http://myserver:8080/UserPrefs", {jid:'fcc'}).then(function(response) {
        return response.data;
      });
  };

你可以这样简化:

  this.getUserData = function() {
      return $http.get("http://myserver:8080/UserPrefs", {jid:'fcc'});
  };

然后使用如下结果:

  RfcDataService.getUserData().success(function(result) {
      $scope.rfcData = result;
  });

答案 1 :(得分:0)

您正在尝试将$scope注入服务中。你不能这样做,因此错误。正确的服务代码:

var RFC = angular.module('rfcApp', []);

RFC.service('RfcDataService', function($http) {
    this.getUserData = function() {
        $http.get("http://myserver:8080/UserPrefs?jid=fcc").then(function(response) {
            return response.data;
        });
    };
});

RFC.controller('RfcMainController', ['$scope', '$http', '$sce', 'RfcDataService', function($scope, $http, $sce, RfcDataService) {
    $scope.rfcData = RfcDataService.getUserData($http).then(function() {
        angular.forEach(data, function(singleItem) {
            if (singleItem.dataFor === 'Home') {
                $scope.homeTabs = singleItem.tabs;
            }
        });    
    }); 
}]);

注意,您如何使用getUserData方法返回的promise object。您在$http方法中也不需要getUserData参数。