在angularjs中切换筛选结果

时间:2015-10-28 20:13:39

标签: angularjs

如何在第一次点击时过滤,然后在第二次点击时重置过滤器?我想首先显示包含图像的项目,然后在第二次单击时重置过滤器。 请检查[小提琴] [1]      [1]:http://jsfiddle.net/6L7xn/9/ 感谢

  <button class="btn btn-primary" ng-click="myFilter = {'largeImage': {'hasImage': 'Yes'}}">Images</button

2 个答案:

答案 0 :(得分:1)

我已经分叉了你的jsfiddle: http://jsfiddle.net/jkrielaars/n5q9xeej/2/

我必须改变一些事情:

  • 您的原始过滤器正在检查hasimage:是(带有大写字母)。 在你的对象中,yes是全部小写
  • 以启用&#34;深度过滤&#34;您需要将:true作为第三个参数传递给过滤器
  • 我做了一个切换功能,可以在&#39; {}&#39;之间切换myFilter对象。以及你想要过滤的东西。

控制器:

    $scope.myFilter = {};
    $scope.toggleFilter = function(){
        if(angular.equals({}, $scope.myFilter)){
            $scope.myFilter = {'largeImage': {'hasImage': 'yes'}};
        }else{
            $scope.myFilter = {};
        }
    }

观点:

    <button class="btn btn-primary" ng-click="toggleFilter()">Images</button>

    <div class="item-sc" data-ng-repeat="d in things | filter:myFilter:true">

答案 1 :(得分:0)

足够简单,可以添加一个函数来设置控制器中的范围变量,您可以通过ng-click调用该变量。然后将过滤器设置为等于scope变量中的值。像这样:

添加到控制器

min_lon

<强> HTML

$scope.myFilter = 'no' // or whatever you want to default to;
$scope.setMyFilter = function(){
    $scope.myFilter = $scope.myFilter === 'no' ? 'yes' : 'no';
};