2013-08-29 176 views
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; 
    }; 
}); 

爲什麼角返回傳遞給filter功能的回調函數內的功能?爲什麼不使用它作爲過濾器定義的佔位符和模板? 這個語法根本不是開發者友好的。 Angular有什麼限制使它使用這個函數嵌套?這是一種模式嗎?

我猜(基於大量使用jQuery和其他庫)什麼似乎是合乎邏輯和正常是這句法:

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

回答

2

這一切都與角不依賴注入的方式做。

您希望能夠將服務注入過濾器,但返回不使用依賴注入的函數。

例如,讓我們說,你的過濾器使用$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); 
    }; 
}); 

您也可以從這個例子看到,做這種方式可以讓你創建僅適用於該過濾器的「私人」的職能。

+0

那麼,是否可以使用'['$ location',function(){}]'語法,並將該函數用作過濾器,而不是嵌套函數?它與封閉有什麼關係? –

+0

是的。如果你想使用數組(minify-safe)語法,它也可以在這裏工作。 –

+0

是的,封閉是其中的一部分。我的'process()'函數在返回函數中關閉。您放入更高級別函數的任何其他變量也將被關閉。 –

相關問題