HTML中条件的角度自定义过滤不起作用

时间:2016-07-21 15:03:43

标签: javascript angularjs angularjs-ng-repeat ng-repeat angularjs-filter

我的角色很新,所以我的问题可能看起来简单或愚蠢,但我没有找到任何解决方案。 我的控制器中有一个集合(例如,整数集合),我想过滤它并获取条件为真的项目。

起初我试过这个:

<div>{{myCollection.find(item => item === 2)}}</div>

它并没有奏效。 然后我找到了另一种方法(我不喜欢哪一种方法,因为我总是只有一个元素可以展示而且不需要进行渲染):

<div ng-repeat="item in list | filter:{item === 2}">
    <div>{{item}}</div>
</div>

它也不起作用。 这是JSBin的努力:http://jsbin.com/govovocace/1/edit?html,js,output

我的问题有可能解决吗?计算控制器中的必需字段并将其传递给视图并不适合我(不幸的是)。

3 个答案:

答案 0 :(得分:1)

您可以在控制器中定义过滤器功能,如下所示:

$scope.filterFn = function(val){
    return val === 2;
};

然后在您的模板中使用它,如下所示:

<div ng-repeat="item in list | filter:filterFn">
    <div>{{item}}</div>
</div>

Tha说,这相当于刚开始过滤阵列,所以我不确定这是否符合您的需求。如果您有特定用例,则不适合在评论中告诉我。

答案 1 :(得分:1)

你有语法错误。当您直接过滤正在循环的实际对象时,不应该提及任何<div ng-repeat="profile in profiles" > <profile name="{{profile.name}}" age="{{profile.age}}" ></profile> </div> 内部过滤器。最后一个选项object是因为我们要进行精确检查。

<强> HTML

true

Demo Plunkr

答案 2 :(得分:0)

我会做这样的事情

.controller('SomeController',function($scope){

 // get the list from somewhere
  $scope.list  = [] // some array for instance

  $scope.dataList = list.filter(function(i){
     return i.someVal==list.someVal; // condition that satisfy your req
  });

});

现在将其用作视图

<div ng-repeat=" item in dataList"> 
   {{item}}
</div>

如果您的情况只返回一个结果,那么您可以

$scope.dataList = list.filter(function(i){
         return i.someVal==list.someVal; // condition that satisfy your req
      })[0];