Angular:使用Filter和OR Operator Pipe

时间:2015-10-14 18:09:27

标签: angularjs filter pipe

是否有办法在AngularJS表达式中使用过滤管道和OR管道。例如:

{{ price | currency || "no price set" }}

这可能吗?

感谢任何帮助。提前谢谢!

3 个答案:

答案 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}}

参见 updated js fiddle

答案 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;
    });
  }

}