【问题标题】:Grab input value and insert it into *ngFor directive?获取输入值并将其插入 *ngFor 指令?
【发布时间】:2017-12-06 04:05:55
【问题描述】:

我还是 Angular/JS 的新手... 我正在通过过滤器管道显示一堆数据,现在我希望能够切换我的数据的排序方式:升序或下降。我有一个运行良好的“orderBy”管道,但我目前必须对方向进行硬编码,并且我希望它是动态的。我想通过两个单选按钮来实现这一点,但是我无法获取输入值并将其插入到我的 *ngFor 指令中。

<input type="radio" value="+"> Ascending<br>
<input type="radio" value="-"> Descending<br>

我需要抓住“+”或“-”并将其插入到“recordStartDate”之前。

<li (click)="showArtist(item);"
    *ngFor="let item of artists | search: field1Filter | orderBy:
    ['recordStartDate']">
</li>

['-recordStartDate'] 产生降序,['+recordStartDate'](或根本没有符号)产生升序。

实现这一目标的最佳方法是什么?

谢谢!

编辑:

我在这里使用这个管道:https://stackoverflow.com/a/35635370/8201772,这里有一个演示:http://fuelinteractive.github.io/fuel-ui/#/pipe/orderby。请注意,在演示中,有一些选择选项通过“+”和“-”控制数据是按升序还是降序排序。如何复制这些选择选项功能?我会对原始答案发表评论,但我需要 50+ 名声才能这样做。谢谢!

编辑两个:

好的,所以我更新了两个单选按钮,如下所示:

<input type="radio" name="orderbydescending" [(ngModel)]="orderbydescending" value="['+recordStartDate']">Ascending<br>
<input type="radio" name="orderbydescending" [(ngModel)]="orderbydescending" value="['-recordStartDate']">Descending

并在我看来使用以下内容:

*ngFor="let item of artists | search: field1Filter | orderBy : orderbydescending"

然后我收到以下错误:http://imgur.com/a/KOxv5

如果我删除“['”和“']”单选按钮的值,那么管道将停止正常工作(我仍然会遇到同样的错误)。

有什么想法吗?再次,硬编码这个工作完美。谢谢!

【问题讨论】:

    标签: html angular select input radio-button


    【解决方案1】:

    我实际上会使用一个布尔值来测试要过滤的方向

    <input type="radio" [(ngModel)]="orderbydescending"  name="orderbydescending" value="false">Ascending<br>
    <input type="radio" [(ngModel)]="orderbydescending"  name="orderbydescending" value="true">Descending
    

    那么在你看来:

    <li (click)="showArtist(item);" *ngFor="let item of artists | search: field1Filter | orderBy : orderbydescending">
        {{ data goes here }}
    </li>
    

    然后您的过滤器将接受 orderbydescending 值作为参数:

    export class OrderByPipe implements PipeTransform {
    
        transform(value: any[], args?: any): any[] {
            // args holds true if ordering by descending, otherwise, you are ordering ascending
        }
    }
    

    【讨论】:

    • 谢谢,伯温!这通常是完美的,但是,我似乎无法使用我正在使用的特定管道来实现它。我在这里使用这个管道:stackoverflow.com/questions/32882013/angular-2-sort-and-filter/…——这里有一个演示:fuelinteractive.github.io/fuel-ui/#/pipe/orderby。在演示中,查看选择选项以及用户如何通过控制“+”或“-”在升序和降序之间切换。知道这是如何工作的吗?
    • 单步执行代码时,您看到了什么错误?
    • 查看我的 edit two 以了解我的更新和产生的错误。谢谢!也许我犯了一个非常简单/愚蠢的错误?
    • @Boosman OrderBy 管道创建者在这里。只需通过删除括号和' 将您的值更改为字符串。所以只需value="recordStartDate"value="-recordStartDate"。数组括号允许对多个属性进行排序
    • @CoryShaw,谢谢!然而,事实证明我的实际问题是管道没有完全正确地对数据进行排序。我的“recordStateDate”值是以下格式的日期:YYYYMMDD(没有破折号;它没有显示在任何地方)。管道返回 19990505 作为比 19920918 低的数字。目前我只有大约五个虚拟数据条目,但其他所有内容都得到了正确排序。然而,这两个“日期”是互换的。想法?
    猜你喜欢
    • 1970-01-01
    • 2019-03-05
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多