Почему я получаю неправильный токен инъекции! в этом угловом коде приложения?

Я пытаюсь настроить спокойный интерфейс API через AngularJS со следующим кодом:

'use strict';

(function(angular) {

  function ApiAction($resource, ResourceParameters) {
    return $resource(ResourceParameters.route,
      { },
      { api_index: {
        method: ResourceParameters.method,
        isArray: true 
        }
      });

    return $resource(ResourceParameters.route,
      { },
      { create: {
        method: ResourceParameters.method,
        isArray: true
        }
      }
                    );
  }

  function ResourceParameters($scope) {
    var factory = {};
    factory.method = '';
    factory.route = '';
    factory.SetMethod = function(method) {
      factory.method = method;
    }
    factory.SetRoute = function(route) {
      factory.route = route;
    }
    return factory;
  }

  function superheroCtr($scope, ApiAction, ResourceParameters) {
    $scope.superheroSubmit = function() {
     // ApiAction.create({}, { superhero_name: $scope.superheroName, age: $scope.superheroAge });
      angular.forEach($scope.superheroes, function(hero) {
  //      ApiAction.create({}, { superhero_name: hero.superhero_name, age: hero.age }); 
      });
    };
    var heroesResources = ResourceParameters($scope).SetRoute('/api/');
    var heroes = ApiAction.api_index({}, heroesResources);
    $scope.superheroes = [];
    heroes.$promise.then(function(data) {
      angular.forEach(data, function(item) {
        $scope.superheroes.push(item);
      });
    }, function(data) {
      //if error then...
    });

    $scope.appendSuperheroFields = function() {
      var i = $scope.superheroes.length + 1;
      $scope.superheroes.push({"id": i, age: "", superhero_name: "" })
    }

  }

  var superheroApp = angular.module('superheroApp', ['ngResource']);
  superheroApp.controller('superheroCtr', ['$scope', 'ApiAction', 'ResourceParameters', superheroCtr]);
  superheroApp.factory('ResourceParameters', ['$scope', ResourceParameters]);
  superheroApp.factory('ApiAction', ['$resource', ResourceParameters, ApiAction]);

})(angular);

Тем не менее, когда я запускаю его, я получаю следующую ошибку:

Ошибка: [$injector:itkn] Неправильный токен внедрения! Ожидаемое имя службы в виде строки, полученной функцией ResourceParameters($scope)

Почему это?


person Nona    schedule 08.08.2015    source источник


Ответы (1)


Просто вы не можете внедрить $scope ИЛИ у вас нет доступа к $scope внутри фабрики

Ваша проблема в этой строке

superheroApp.factory('ResourceParameters', ['$scope', ResourceParameters]);

Вам нужно заменить эту строку на

superheroApp.factory('ResourceParameters', [ResourceParameters]);

Фабрика

function ResourceParameters() { //<--removed $scope from here
    var factory = {};
    factory.method = '';
    factory.route = '';
    factory.SetMethod = function(method) {
      factory.method = method;
    }
    factory.SetRoute = function(route) {
      factory.route = route;
    }
    return factory;
}

Обновить

Кроме того, вы должны исправить объявление ApiAction, где ResourceParameters должно быть помещено внутри ' одинарных кавычек.

superheroApp.factory('ApiAction', ['$resource', 'ResourceParameters', ApiAction]);
person Pankaj Parkar    schedule 08.08.2015
comment
Хм, так что если я это сделаю, я получу это: Error: [$injector:itkn] Incorrect injection token! Expected service name as string, got function ResourceParameters() - person Nona; 09.08.2015
comment
@Нона, ты изменила superheroApp.factory('ResourceParameters', ['$scope', ResourceParameters]); на superheroApp.factory('ResourceParameters', [ResourceParameters]);, а также посмотрела обновленный ответ? - person Pankaj Parkar; 09.08.2015