【问题标题】:AngularJS - Filter checkbox with numbers/lengthAngularJS - 带有数字/长度的过滤复选框
【发布时间】: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();
}

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

【问题讨论】:

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

标签: angularjs filter radio


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 2017-01-15
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多