【问题标题】:How to make Angular ngRepeat filter on the view value?如何对视图值进行 Angular ngRepeat 过滤器?
【发布时间】:2014-09-11 19:48:29
【问题描述】:

我正在使用 ngRepeat 生成表格行来迭代数据数组。此迭代使用我制作的多列过滤器进行过滤。表的列由嵌套的 ngRepeat 创建,该 ngRepeat 遍历列数组。每个单元格的值可能会传递给“查找”过滤器,以将单元格的数据值转换为“完成”值。 (就像将'Y'转换为'Yes'和'N'转换为'No'。转换不限于'Yes'或'No'类型的东西。有几种不同的。)

看起来像这样:

<tr ng-repeat="row in data | multiColumnFilter : filters">
  <td ng-repeat="column in columns | orderBy : 'order'">
    <span ng-if="column.lookup">{{row[column.alias] | lookup : column.lookup}}</span>
    <span ng-if="!column.lookup">{{row[column.alias]}}</span>
  </td>
</tr>

我的问题是这样的:

我希望用户能够根据表格单元格中的可见文本过滤表格的内容,例如“是”或“否”。但是数据数组中存储的是'Y'或'N'。

我试图避免预先转换我的数组,因为我还想保留原始数据值以用于应用程序的其他部分。

我怀疑我需要保留一组表示转换后的值的冗余数据。考虑到它的开销(它是一个大型数据数组),我宁愿找到一种方法来过滤视图值,而不是数据值。

【问题讨论】:

  • 可以简单地使用标记中的: 将参数添加到您的过滤器以匹配函数中的参数位置

标签: angularjs filter


【解决方案1】:

如果你能发布一个 plunker 或 jsfiddle 会更容易提供帮助,但我会试一试。

假设用户只想查看“是”条目。然后,您需要识别与视图值“是”相对应的原始数据值 (“Y”),并以此进行过滤。所以本质上你需要这样的东西:

function filterBy(column, viewValue) {
    var rawValue = viewValue;
    if (column.lookup)  {
        data.some(function(row) { 
            if (column.lookup(row[column])==viewValue) {
                rawValue = row[column];
                return true;
            }
            else return false; 
        });
    }
    return data.filter(function(row) { return row[column]==rawValue; });
}

注意:some() 的使用意味着一旦找到第一个匹配项,循环就会停止。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多