JavaScript | AngularJS:按日期过滤结果过滤项目

JavaScript | AngularJS: Filter Items by Date-Filter Result

按日期筛选结果筛选项目

ng-repeat 内部,createdAt 属性 使用 | date 过滤器进行过滤。在 ng-repeat 中,item in itemsterm 编辑 | filter。换句话说,我的代码看起来像这样:

<input placeholder="search" ng-model="term" />

<div ng-repeat="item in items | filter:term">
    {{item.createdAt | date}}
</div>

很基础。 date 过滤器采用 2015-09-03T00:12:43.107Z 和 return 的(ISO?)日期,类似于 Sep 2, 2015

期望的场景:

item 显示过滤后的 createdAt 文本,例如 2015 年 9 月 2 日。 用户搜索“2”——并减少数组结果以仅显示那些按日期过滤结果符合他们条件的项目。

用户刚刚在 日期 之前完成过滤项目 -- 但更重要的是,在 用户可见的日期 之前过滤了项目] 基于 date 过滤器的 return 值。

有没有一种方法可以在不编写自定义过滤器的情况下完成此操作——或者我是否需要使用利用 $filter('filter') & $filter('date') 的过滤器?

可能是这样的:

item in items | filter:{date: (term | date:'ISO'), name: term}
// converts term back to ISO for matching (ideally)

我想这也应该知道 term 是否是 一个日期,然后再尝试过滤它,因为 term 也应该如果 item.name 上也有匹配项,则过滤 items 编辑:您可以 运行 通过 date 过滤器的文本值并具有相同的值 returned.

提前致谢

什么对我有用

由于我的需要是保持低复杂性,同时尽可能使实现与本机 filter 功能保持一致——我得出以下结论:

不过滤显示日期

<ul>
    <li>
        <input type="text" ng-model="q" />
    </li>
    <li ng-repeat="order in orders | filter:q">{{order.createdAt | date:'short'}}</li>
</ul>

根据显示的日期(以及其他任何内容)进行过滤:

<ul>
    <li>
        <input type="text" ng-model="q" />
    </li>
    <li ng-repeat="order in orders | filter:q" ng-init="order['|'] = { createdAt: (order.createdAt | date:'short') }">{{order['|'].createdAt}}</li>
</ul>

这很好用,因为我不必专门化 任何东西——只需使用额外的 属性(在 | 命名空间下)初始化迭代) Angular 会在用户输入更改时自动过滤。现在,用户可以按他们看到的内容 或任何其他 属性 进行过滤。

干杯!