0
如果我們希望在AngularJS使用過濾器在控制器方面,我們使用這個哪個javascript構造是這個AngularJS過濾器表達式?
$filter('filter')(array, expression, comparator, anyPropertyKey)
我不明白這一點使用JavaScript的這是構造。我的意思是,它不是一個函數,它不是一個賦值表達式,它不是一個自我執行的函數。它是什麼 ?
如果我們希望在AngularJS使用過濾器在控制器方面,我們使用這個哪個javascript構造是這個AngularJS過濾器表達式?
$filter('filter')(array, expression, comparator, anyPropertyKey)
我不明白這一點使用JavaScript的這是構造。我的意思是,它不是一個函數,它不是一個賦值表達式,它不是一個自我執行的函數。它是什麼 ?
這是一個函數,它返回一個函數,然後執行。
function foo() {
return function bar() {};
}
foo()();
// equivalent to:
var b = foo();
b();
這是一個返回函數的函數。 這裏是它的源代碼:
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);
};
}