AngularJS过滤器(对象和多个值)不起作用

时间:2019-10-01 17:36:59

标签: angularjs angular-ui-router angularjs-filter

所以我得到了一个使用UI-Router的AngularJS的项目,我遍历了一个json,该json具有一个名为“ state”的属性,这是我想用作过滤器的属性,但是,我将使用“选择器”我可以选择“全部”或特定的一个。

我是AngularJS的新手,所以不确定到底是什么不起作用,这是我到目前为止的代码:

df2 <- df %>%
  group_by(group) %>%
  mutate(epi = cumsum(!is.na(starts))) %>%
  ungroup()
df2
# # A tibble: 8 x 4
#   group starts              ends                  epi
#   <fct> <dttm>              <dttm>              <int>
# 1 a     2011-09-18 00:00:00 NA                      1
# 2 a     NA                  2013-03-06 00:00:00     1
# 3 a     2014-08-08 00:00:00 2015-08-08 00:00:00     2
# 4 a     2016-09-18 00:00:00 NA                      3
# 5 a     NA                  2017-03-06 00:00:00     3
# 6 b     2013-08-08 00:00:00 2014-08-08 00:00:00     1
# 7 b     2015-08-08 00:00:00 NA                      2
# 8 b     NA                  2016-08-08 00:00:00     2

但是过滤器无法正常工作 这是我的称呼方式:

function filterState (installment){
    switch(selectedValue) {
        case 1:
            if(installment.state === 'PAID'){
                return installment;
            }
            break;
        case 2:
            if(installment.state === 'LATE'){
                return installment;
            }
            break;
        case 3:
            if(installment.state === 'PENDING'){
                return installment;
            }
            break;
        default:
            return installment;
    }

当我像过滤器一样手动按值过滤时,不确定确切的错误是什么:{state:'PAID'} 有效

3 个答案:

答案 0 :(得分:0)

Filter函数返回迭代器函数。像回调。请检查以下示例。

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.criteria = { name: 'Bob'};

  $scope.criteriaMatch = function( criteria ) {
    return function( item ) {
      return item.name === criteria.name;
    };
  };

  $scope.items =[
    { name: 'Bob'},
    { name: 'Alice'}
  ];
});
<div ng-repeat="item in items | filter:criteriaMatch(criteria)">
  {{ item }}
</div>

http://plnkr.co/edit/vtNjEgmpItqxX5fdwtPi?p=preview

信用:匿名

答案 1 :(得分:0)

如果您需要使用选择选项进行过滤,则可以执行以下操作:

<select name="select" id="select" ng-model="clients.status">
    <option value="PAID">PAID</option>
    <option value="LATE">LATE</option>
    <option value="PENDING">PENDING</option>
    <option value="ALL">ALL</option>
</select>
<div class="row" ng-repeat="installment in clients.installments | filter: filterState">
    {{installment.id}}
</div>

并在控制器中进行过滤的功能:

$scope.filterState = function(installment) {
    if ($scope.clients.status === 'ALL') return true;
    return $scope.clients.status === installment.status;
};

选择选项ALL时,它将显示列表中的所有项目

在此处查看有效的演示:DEMO

答案 2 :(得分:0)

显然,我需要返回一个布尔值而不是对象,我之前曾尝试过,但是我的另一个问题是在执行之后,我直接调用了函数而不是执行vm.function(一次传递给上下文)起作用了。