2016-06-29 78 views
0

如果我們希望在AngularJS使用過濾器在控制器方面,我們使用這個哪個javascript構造是這個AngularJS過濾器表達式?

$filter('filter')(array, expression, comparator, anyPropertyKey) 

我不明白這一點使用JavaScript的這是構造。我的意思是,它不是一個函數,它不是一個賦值表達式,它不是一個自我執行的函數。它是什麼 ?

回答

2

這是一個函數,它返回一個函數,然後執行。

function foo() { 
    return function bar() {}; 
} 

foo()(); 

// equivalent to: 
var b = foo(); 
b(); 
1

這是一個返回函數的函數。 這裏是它的源代碼:

function filterFilter() { 
    return function(array, expression, comparator, anyPropertyKey) { 
    if (!isArrayLike(array)) { 
     if (array == null) { 
     return array; 
     } else { 
     throw minErr('filter')('notarray', 'Expected array but received: {0}', array); 
     } 
    } 

    anyPropertyKey = anyPropertyKey || '$'; 
    var expressionType = getTypeForFilter(expression); 
    var predicateFn; 
    var matchAgainstAnyProp; 

    switch (expressionType) { 
     case 'function': 
     predicateFn = expression; 
     break; 
     case 'boolean': 
     case 'null': 
     case 'number': 
     case 'string': 
     matchAgainstAnyProp = true; 
     //jshint -W086 
     case 'object': 
     //jshint +W086 
     predicateFn = createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp); 
     break; 
     default: 
     return array; 
    } 

    return Array.prototype.filter.call(array, predicateFn); 
    }; 
}