2015-12-16 6 views
1

Я получаю Неизвестный ProviderAngularJS инъекционные службы в контроллер

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

ответ

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

Обратите внимание, как вы работаете с promise object возвращенного getUserData методом. Вам также не нужен параметр $http в методе getUserData.

+0

Спасибо. Я не знал, что $ scope не может быть введена в службу. –

1

Первое:

  • Удалить $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; 
    }); 
+0

Спасибо и хорошо знаю параметризованное использование $ http ... –

+0

Да ... но решила ли ваша проблема? – pixelbits

+0

Да. он сделал. благодаря –

Смежные вопросы