1

我通过下面的代码AngularJS试图建立一个RESTful API接口:为什么我得到“不正确的注射标记!”在这个角度应用程序代码?

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

然而,当我运行它,我得到以下错误:

错误:[$注射器:itkn ]不正确的注射标记!预期服务名称为字符串,得到函数ResourceParameters($ scope)

这是为什么?

回答

1

Simply you can not inject $scopeOR you can not have access to $scope inside a factory

你的问题是在这条线

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

更新

另外,你应该纠正地方ResourceParameters应放在里面'单qoutes

superheroApp.factory('ApiAction', ['$resource', 'ResourceParameters', ApiAction]); 
+0

嗯了的ApiAction声明,所以如果我这样做,我得到这个:'错误:[$注射器:itkn]不正确的注射标记!预期的服务名称作为字符串,得到的函数ResourceParameters()' – Nona

+1

@Nona你是否更改'superheroApp.factory('ResourceParameters',['$ scope',ResourceParameters]);'to'superheroApp.factory('ResourceParameters',[ResourceParameters ]);'&也看看更新的答案 –

+0

谢谢,这修正了那个错误! – Nona

相关问题