2017-03-17 66 views
0

嗨,这是我的酒店项目。但是我有一个过滤器的问题。 我想筛选amenities列中的数据。AngularJS mysql多元素过滤器

这就是:my fiddle

,如果你选择一个复选框,但如果选择多个复选框这是行不通的作品。

我怀疑问题来自indexof,而不是我可以使用的。我应该遵循什么方法?

如何改变这一行:indexOf(x);

这是我的坏代码:

//PROBLEM FILTER HERE 

$scope.am_en = function() 
{ 
    //get input value 
    x = $(".hosting_amenities input:checkbox:checked").map(function(){return $(this).val();}).get(); 
    //filter 
    $scope.ot_Filter = function (location) { 
     return location.amenities.indexOf(x) !== -1; 
    }; 
} 

回答

1

的问题确实是由函数$scope.am_en引起的,在内部函数的声明$scope.ot_Filter

当你选择多个复选框时,你的x变量是一个对象数组,所以你应该做一个循环并且可以创建一个变量来检查该元素是否应该显示o不是。可以按如下方式做到这一点:

$scope.ot_Filter = function (location) { 
    var shouldBeShown = false; 
     for (var i = 0; i < x.length; i++) { 
      if (location.amenities.indexOf(x[i]) !== -1) { 
       shouldBeShown = true; 
      break; 
     } 
    } 
    return shouldBeShown; 
}; 

我修改你的jsfiddle,这样您就可以看到这个解决方案正常工作。

+0

这太好了。我一直试图解决它几天。非常感谢你。 – toplumdusmani

+0

如果房间里没有电视,我怎么能隐藏所有的房间。我们可以过滤吗?例如:如果wifi和电视被检查。如果电视机没有任何空间,结果为空 – toplumdusmani

+0

我建议您将新的疑问作为单独的问题发布,以便整个社区知道您还有什么需要解决的问题。 – Icarus