簡體   English   中英

AngularJS將服務注入控制器

[英]AngularJS injecting service into a controller

我正在獲得未知提供者

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

第一:

  • 從您的getUserData函數中刪除$http它已經在作用域中,並且您的服務函數也無法注入。

  • 如果您使用查詢字符串參數調用$http ,則將其作為第二個參數傳遞

您的getUserData函數應返回一個promise:

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

您正在嘗試將$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方法返回的getUserData 對象 您也不需要getUserData方法中的$http參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM