2

要定义 Angular 的过滤器,您应该编写:

angular.module('app', [])
.filter('mix', function () {
    // Why do we return a function here?
    return function (input) {
        var output;
        // doing some business here
        return output;
    };
});

为什么Angular在传递给函数的回调函数内部返回一个函数filter?为什么不直接使用它作为过滤器定义的占位符和模板呢?这种语法根本对开发人员不友好。Angular 使用这个函数嵌套有什么限制?它是一种模式吗?

我猜看起来合乎逻辑和正常的(基于大量使用 jQuery 和其他库)是这样的语法:

angular.module('app', [])
.filter('mix', function (input) {
    var output;
    // doing some business here
    return output;
});
4

1 回答 1

2

这一切都与 Angular 进行依赖注入的方式有关。

您希望能够将服务注入过滤器,但返回一个不使用依赖注入的函数。

例如,假设您的过滤器使用该$location服务:

angular.module('app', [])
.filter('mix', function ($location) {
    // Location got injected.

    // create some private functions here
    function process(input) {
       // do something with the input and $location
    }

    return function (input) {
        return process(input);
    };
});

你也可以从这个例子中看到,这样做可以让你创建只对这个过滤器可用的“私有”函数。

于 2013-08-29T18:12:32.850 回答