是否有办法在AngularJS表达式中使用过滤管道和OR管道。例如:
{{ price | currency || "no price set" }}
这可能吗?
感谢任何帮助。提前谢谢!
答案 0 :(得分:2)
您可以在括号中用{{(价格|币种||| “ no price set”}},以便在(价格|货币)被评估为false时呈现“ no price”。
答案 1 :(得分:0)
虽然不太可读,但可以使用三元运算符:
{{ price ? (price | currency) : "no price set" }}
参见 js fiddle
使用上述解决方案有一个缺点:如果价格定义但等于零(假设这是您申请中价格的有效值),您将获得"没有定价和#34; 为零是 falsy 。
您可以通过将函数angular.isDefined
公开给范围来解决这个问题:
$scope.isDefined = angular.isDefined;
{{isDefined(price) ? (price | currency) : "no price"}}
但是,总而言之,定义自定义过滤器会更清晰:
app.filter('priceFilter', function ($filter) {
return function (input) {
return angular.isDefined(input) ? $filter('currency')(input) : 'No price set';
};
});
{{price | priceFilter}}
答案 2 :(得分:0)
我是你需要的客人:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(items: Array<any>, conditions: {[field: string]: any}): Array<any> {
return items.filter(item => {
let allBlanks = true;
for (let field in conditions) {
let itemField = item[field] ? item[field].toLowerCase() : '';
let conditionField = conditions[field] !== undefined ? conditions[field].toLowerCase() : '';
if(conditionField !== '') {allBlanks = false;}
if (itemField.indexOf(conditionField) !== -1 && conditionField !== '') {
return true;
}
}
return allBlanks;
});
}
}