AngularJS - $ filter未定义

Mic*_*umo 6 javascript angularjs

我试图将一个过滤器注入我的控制器并使用它:

angular
    .module('graduateCalculator', [])
        .filter('slug', function() {
                return function(input) {
                    if(input) {
                        return input.toLowerCase().replace(/[^a-z-]/g, '-');
                    }
                };
        }).controller('GraduateCalculatorController', ['$filter', app.graduateCalculator($filter)]);
Run Code Online (Sandbox Code Playgroud)

但是,我得到了上述错误.我显然做了一些非常错误的事情 - 对我来说不够明显.

Uncaught ReferenceError: $filter is not defined
Run Code Online (Sandbox Code Playgroud)

它可能与我的功能有关.它是这样写的:

var app = {

    graduateCalculator: function($filter) {
        window.console.log( $filter('slug')('A random looking string...') );
    }

};
Run Code Online (Sandbox Code Playgroud)

帮助赞赏!

Bro*_*cco 15

第二个参数[module].controller是构造函数,不调用构造函数...

// change this...
.controller('GraduateCalculatorController', ['$filter', app.graduateCalculator($filter)]);
// to this...
.controller('GraduateCalculatorController', ['$filter', app.graduateCalculator]);
Run Code Online (Sandbox Code Playgroud)


Cor*_*ant 6

你的控制器函数(你当前有一个函数调用,而不是回调函数)需要是一个需要$ scope(控制器需要$ scope)的函数,也包含$ filter.

controller('GraduateCalculatorController', ['$scope', '$filter', function($scope, $filter){<your code here>}]);
Run Code Online (Sandbox Code Playgroud)

但是,有两种方法可以使用您的过滤器.您可以注入$ filter并调用

$filter('slug')(inputStuff)
Run Code Online (Sandbox Code Playgroud)

或者你可以注入slugFilter并直接调用它

slugFilter(inputStuff)
Run Code Online (Sandbox Code Playgroud)

关于角度最常见的抱怨之一是错误消息,这似乎是这里的问题!

如果我对任何事情都不够清楚,请告诉我,我会尽力帮助.