控制器没有定义 - 但为什么?

时间:2015-11-17 00:11:29

标签: angularjs

所以在使用这个精美的rails-tutorial

我在app.js

中这样做
var receta = angular.module('receta',[
    'templates',
    'ngRoute',
    'controllers'
]);
...
var controllers = angular.module('controllers', []);
controllers.controller('RecipesController', RecipesControllerFunc);
RecipesController.$inject = ['$scope', '$routeParams', '$location'];
//^ ^ ^ ^ gives me `RecipesController is not defined`
function RecipesControllerFunc($scope,$routeParams,$location){
    $scope.search = function(keywords) {
        $location.path('/').search('keywords', keywords)
    }

    if($routeParams.keywords){
        keywords = $routeParams.keywords.toLowerCase();
        $scope.recipes = recipes.filter(function(recipe){
            return (recipe.name.toLowerCase().indexOf(keywords) != -1)
        })
    } else {
        $scope.recipes = [];
    }
    console.log(recipes);
};

我在其他项目中使用了这种$inject语法没有问题,controllers肯定是定义的......

那么为什么不在这里定义RecipesController?

P.S。当我在数组' 语法中使用通常的'依赖关系+函数时,一切正常。但我希望$inject语法有效。

2 个答案:

答案 0 :(得分:1)

你有错字。 您已经注册了函数RecipesControllerFunc,但是您尝试将服务注入RecipesController我认为不存在的服务。

我无法在中间看到代码所以......我希望它能为你指明方向。

更新:我将RecipesController函数名称更改为RecipesControllerFunc的正确名称。

var receta = angular.module('receta',[
    'templates',
    'ngRoute',
    'controllers'
]);
// Some middle code
var controllers = angular.module('controllers', []);
controllers.controller('RecipesController', RecipesControllerFunc);
RecipesControllerFunc.$inject = ['$scope', '$routeParams', '$location'];
//^ ^ ^ ^ gives me `RecipesController is not defined`
function RecipesControllerFunc($scope,$routeParams,$location){
    $scope.search = function(keywords) {
        $location.path('/').search('keywords', keywords)
    }

    if($routeParams.keywords){
        keywords = $routeParams.keywords.toLowerCase();
        $scope.recipes = recipes.filter(function(recipe){
            return (recipe.name.toLowerCase().indexOf(keywords) != -1)
        })
    } else {
        $scope.recipes = [];
    }
    console.log(recipes);
};

答案 1 :(得分:1)

如果代码的中间部分不存在RecipesControllerFunc,则错误在于您在未定义RecipesController的情况下注册RecipesControllerFunc的方式。

试试这个:

var receta = angular.module('receta',[
    'templates',
    'ngRoute',
    'controllers'
]);
...
var controllers = angular.module('controllers', []);
function RecipesControllerFunc($scope,$routeParams,$location){
    $scope.search = function(keywords) {
        $location.path('/').search('keywords', keywords)
    }

    if($routeParams.keywords){
        keywords = $routeParams.keywords.toLowerCase();
        $scope.recipes = recipes.filter(function(recipe){
            recipe.name.toLowerCase().indexOf(keywords) != -1
        })
    } else {
        $scope.recipes = [];
    }

};

controllers.controller('RecipesController', RecipesControllerFunc);
RecipesController.$inject = ['$scope', '$routeParams', '$location'];