【问题标题】:building angularJS filter构建angularJS过滤器
【发布时间】:2015-03-16 08:39:35
【问题描述】:

当检查被激活时,我正在尝试按字段过滤项目购买时出现错误。

<input type="checkbox" ng-model="filterActive">
<input type="text" ng-model="reftext"/>
<input type="text" ng-model="nametext"/>


<tr ng-repeat="car in cars.items | togglableFilter:{reference:reftext, name:nametext}:filterActive">

</tr>


.filter('togglableFilter',[function(){
    return function(input, filterText, isFilterActive){

      if(!angular.isDefined(isFilterActive) || !isFilterActive) return input;
      var ret = input;
      var col = [];
      var isDefined = false;

      var key = Object.keys(filterText);

      for (var i = 0; i < key.length; i++) {

        if(angular.isDefined(filterText[key[i]])) {
          isDefined = true;
          angular.forEach(input, function (v) {
            if (v[key[i]].indexOf(filterText[key[i]]) !== -1) {
              col.push(v);
            }
          });
        }
      }

      if (isDefined) return col; else return input;
    }
  }]);

错误:[ngRepeat:dupes] errors.angularjs.org/1.2.13/ngRepeat/dupes?p0=car%20in%20cars.items%20%7C%20togglableFilter%3A%7Breference%3Areftext%2C

【问题讨论】:

  • 错误告诉你看这个:docs.angularjs.org/error/ngRepeat/…,你的过滤器似乎返回了对相同项目的多个引用。
  • cars.items 中有重复的条目,因此 Angular 无法将唯一键与创建的 DOM 元素相关联。如果您在上面给出的 URL 中看到错误详细信息,您可以看到解决方案是使用 $index 跟踪。

标签: angularjs filter


【解决方案1】:

cars.items 中有重复的条目,因此 Angular 无法将唯一键与创建的 DOM 元素相关联。如果您在上面给出的 URL 中看到错误详细信息,您可以看到解决方案是使用 track by $index这样使用 $index 唯一值 angularJS 可以跟踪模型和 DOM 之间的关联

 <tr ng-repeat="car in cars.items  track by $index | togglableFilter:{reference:reftext, name:nametext}:filterActive">

如果您在过滤数据时遇到困难,请尝试使用

 <tr ng-repeat="car in cars.items   | togglableFilter:{reference:reftext, name:nametext}:filterActive track by $index">

【讨论】:

  • 如果我添加下一行 复制汽车信息时我用两个过滤器过滤
  • @AgustínCastro 你想用那个过滤器做什么?
  • 勾选复选框时按列过滤。我有很多可以按属性过滤的输入
  • 当我用两个或多个输入过滤时,复制结果数字。例如,如果我有两个结果并且我尝试使用两个输入进行过滤,我将得到 4 个结果。但是,我尝试用一​​个输入进行过滤,我会得到两个
猜你喜欢
相关资源
最近更新 更多
热门标签