我有一个模型$ 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
}
]
}
模型中有多个这样的记录。遗憾的是,保存SeqNumber
和Status
的服务的编写方式要求我返回整个对象,以便将其保存在数据库表中。我正在做的是创建一个接受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埋藏得更深。如何在过滤器中正确引用它?
答案 0 :(得分: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或下划线这样的库来进行这些操作