AngularJS - 带有数字/长度的过滤复选框

Posted

技术标签:

【中文标题】AngularJS - 带有数字/长度的过滤复选框【英文标题】:AngularJS - Filter checkbox with numbers/length 【发布时间】:2018-12-21 18:02:14 【问题描述】:

我有一个搜索各种门票的应用程序。 在边栏中,我有一些过滤器,因此用户可以过滤他们的结果(这些包括复选框和单选按钮,如 eBay/Amazon 等)。

所以它在侧边栏中看起来与此类似:

如何购买

直接借记 (10) 现金(2)

所以用户一眼就知道,如果他们点击直接借记,它将返回 10 个结果。然后我遇到的问题是,当用户点击直接借记时,单选按钮会变成这个......

如何购买

直接借记 (10) 现金 (0)

如果它是一个复选框,这将是正确的,因为单击直接借记和现金将返回 0 个结果。然而,在这种情况下(单选按钮),如果用户点击 Cash,他们仍然应该看到有 2 个结果。

这是我的代码...

html

<ul class="checkbox-list nga-fast nga-collapse" data-ng-show="ticketing.filterButtons.OperatorBtn">
  <li data-ng-repeat="filter in ticketing.filterButtons.Operator | orderBy: filter" data-ng-if="filter != null">
    <input id="operator$index" name="operator$index" type="radio" class="stylized" data-ng-model="ticketing.searchFilters.Operator" data-ng-change="ticketing.update()" value="filter" />
    <label for="operator$index">filter 
      ( (ticketing.filteredTickets | filter: Operator: filter).length)
    </label>
  </li>
</ul>

JS

function update() 
  var filtered = vm.all;
  console.log(vm.searchFilters);
  // For each filter in the search filters loop through and delete any that state false, this is so it doesn't explicitly match false and shows everything.
  angular.forEach(vm.searchFilters, function(val, key) 
    // if Key/Property contains 'Allow" and the value is true || if Key/Property doesn't contain 'Allow' and val is false (this is to make sure the oppposite/exclude filter values are deleted as the trues will be falses and vice versa)
    if ((key.indexOf('Allow') !== -1 && val) || (val == false && key.indexOf('Allow') === -1)) 
      // Delete the filter and value
      delete vm.searchFilters[key];
    
  );

  // Filter results by the filters selected
  filtered = $filter('filter')(filtered, vm.searchFilters);

  // Sort results by selected option
  vm.filteredTickets = $filter('orderBy')(filtered, vm.orderBy);

  console.log(vm.filteredTickets);
  console.log(vm.searchFilters);

  vm.updateGrid();

如果您需要更多信息或代码,请告诉我,我会提供。

【问题讨论】:

你能提供任何演示吗? 我会参数化(甚至是一个词?)输入类型,并在您的过滤器中使用该类型来确定如何过滤您的数据集。 【参考方案1】:

这是一个猜测。下面一行可能有问题

     ( (ticketing.filteredTickets | filter:  Operator:filter).length)           

点击Direct Debit";,您可能已经更新了“ticketing.filteredTickets”,只有“直接借记”的数据,因此没有“现金”的数据

【讨论】:

以上是关于AngularJS - 带有数字/长度的过滤复选框的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 复选框过滤器

基于复选框选择的AngularJS过滤器

数字数组的AngularJS复选框[重复]

使用jQuery更新复选框时,AngularJS不会刷新

如何在angularjs中使用带有嵌套ng-repeat的复选框

angularJs 控制文本长度,超出省略号过滤器