所以在使用这个精美的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
语法有效。
答案 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'];