0

我想我需要以某种方式使用过滤器,但我无法弄清楚,下面的代码是我创建的,但我确信它效率非常低

$scope.isInList = function(ident){ 
  var answer = false;

  if($scope.List){ // stops it from firing before it has something to check against
      var length = $scope.Lister.list[number].ingr.length;
      for (var i=0; i < length; i++){
          if($scope.Lister.list[number].thing[i].id == ident){ var answer = true;}

      }
  }
  return answer;
};

在视图中我只有一个 ng-hide,如果没有找到,该函数返回 false ..

ng-hide="isInList(ident)"

我现在看到我可以添加 Break;如果真的让它变得更好一点,但我仍然希望有一种更甜美的角度方式。

编辑:

我只想删除 ng-repeat tho 中的一个对象。

<ul>
  <li ng-repeat="item in List">item.name <button ng-click="addToAnotherList(item.id)">Add</em></li>
</ul>

我可以让过滤器只移除元素吗?

过滤器也可以检查变量数组吗?

我需要过滤器从另一个列表中检查未定义数量的 id-s(以查看该项目不在该列表中)

现在 ng-hide 用于搜索中的每个结果,for 循环检查列表中我不想重复的每个值

4

2 回答 2

1

更好的方法是在您这样做时为您的列表创建一个自定义过滤器功能ng-repeat

这样您就不必ng-hide像过滤器那样处理它。

在不知道你的情况下<html/>

我假设你有这样的事情:

<ul>
    <li ng-repeat="item in List"></li>
</ul>

你想添加|filter:someFunctionng-repeat

<ul>
    <li ng-repeat="item in List| filter: myFilterFunction"></li>
</ul>


$scope.myFilterFunction = function(item){ 
   if(item.SomeProperty === Something){
       return item;
   }
};

jsfiddle 上的简单示例。

于 2013-05-14T22:14:02.913 回答
0

我将支持 Mark 已经提供的过滤器解决方案,但也会为您提供一个使用 ng-hide 的过滤器解决方案,我不建议在过滤器上使用它,因为它不适用于 ie8 并且不如过滤器优化,但它是另一种选择:

$scope.isInList = function(ident){ 

  return $scope.List && 
         $scope.List.thing.filter(function (item) { return (item.id == ident); }).length>0;
}

我不是 100% 确定数组名称,但一般的想法是可行的。

于 2013-05-14T22:46:04.713 回答