在控制器内的多个字段上过滤模型

时间:2015-09-25 17:09:03

标签: angularjs

我有一个模型$ scope.cases,它包含这种格式的案例列表:

{
    "DailyEventCaseID": 0,
    "LocID": "LA ",
    "CourtRoom": "9",
    "CaseID": 0,
    "EventDate": "2015-09-14T00:00:00",
    "DisplayTime": "08:30 am",
    "SortTime": "08:30",
    "SeqNumber": null,
    "StatusID": null,
    "Case": {
      "CaseID": 0,
      "CaseNumber": "BP120669",
      "DivisionCode": "PR",
      "District": "LA ",
      "CaseTitle": "MESCHUK, JOHN & WALBURGA - TRUST (5/10/1989)"
    },
    "Status": null,
    "Events": [
      {
        "EventID": 0,
        "DailyEventCaseID": 0,
        "EntityNumber": "0051",
        "EventName": "INSTRUCTIONS",
        "DailyEventCase": null
      },
      {
        "EventID": 0,
        "DailyEventCaseID": 0,
        "EntityNumber": "0052",
        "EventName": "INSTRUCTIONS",
        "DailyEventCase": null
      },
      {
        "EventID": 0,
        "DailyEventCaseID": 0,
        "EntityNumber": "0053",
        "EventName": "AMENDED-REMOVAL OF TRUSTEE",
        "DailyEventCase": null
      }
    ]
  }

模型中有多个这样的记录。遗憾的是,保存SeqNumberStatus的服务的编写方式要求我返回整个对象,以便将其保存在数据库表中。我正在做的是创建一个接受3个参数的函数:CaseID,CaseNum和MyEventDate。然后我想根据CaseNum和MyEventDate的值来过滤模型(这将使我得到一个对象)。这样我就可以将对象传递给服务并进行保存。

我尝试了以下内容:

$scope.filteredCase = $filter('custom')($scope.cases, { "Case.CaseNumber": CaseNum, "EventDate": MyEventDate });

我已注入过滤服务:

JBenchApp.controller('CaseListCtrl', ['$scope', '$http', 'HoldState', '$filter', 
  function ($scope, $http, HoldState, $filter) {

但是,我无法做到这一点,因为当我在搜索条件中包含“Case.CaseNumber”时,我没有得到任何结果,当我删除它时,我得到的结果与“EventDate”匹配。不幸的是,CaseNumber埋藏得更深。如何在过滤器中正确引用它?

1 个答案:

答案 0 :(得分:1)

<{1>} $filter中有一个$通配符,可用于匹配比第一级更深的属性。

我个人觉得使用Array.prototype.filter()

更容易为此类案例编写自己的内容
$scope.filteredCase = $scope.cases.filter(function(case){
    var isCaseMatch = CaseNum ? Case.CaseNumber === CaseNum : true,
        isDateMatch = MyEventDate ? case.EventDate === MyEventDate : true;      
   return isCaseMatch  && isDateMatch ;    
});

我假设MyEventDate是字符串...相应调整。 这也是使用===的绝对匹配。对于部分匹配,请使用indexOf()

许多人还会使用像lodash或下划线这样的库来进行这些操作