【问题标题】:Angular 5, Passing table of tags to pipe filterAngular 5,将标签表传递给管道过滤器
【发布时间】:2017-11-17 08:50:00
【问题描述】:

我是新来的,所以请宽容:-) 我正在使用 angular 5,但找不到使用标签数组过滤对象数组的方法。 我正在尝试将标签数组传递给我的自定义管道,不幸的是它不起作用。 我的代码如下所示:

组件

*export class StarsComponent implements OnInit {
....
tagFilter: string[];
....
}*

管道

*@Pipe({
name: 'filterByTag'
})
export class FilterByPipe implements PipeTransform {

    transform(items: any[], prop: string, tags: string[]): any {
    console.log('filterByTag items - ', items);
    console.log('filterByTag prop - ', prop);
    console.log('filterByTag tags - ', tags);
    return items;
}*

查看

**<div>
<button type="button" class="btn btn-default" *ngFor="let tag of uniqTags"
    (click)="addTagToFilter(tag)" [ngClass]="{'btn-primary': (tagFilter.indexOf(tag) != -1)}">
    {{tag}}
</button>
</div>
<ul class="stars">
<li *ngFor="let starE of allstars | filterByTag: 'tagFilter': tagFilter"> 
....
</li>

**

我的控制台如下所示:

filterByTag items -  {array of my items} - it's OK
filterByTag prop -  tagFilter - it's OK
filterByTag tags -**it's empty, why?**

有没有办法将字符串标签数组传递给 FilterByPipe ? 谢谢

【问题讨论】:

    标签: arrays angular filter tags pipe


    【解决方案1】:

    管道采用包含所有参数的数组,因此您需要像这样调用它们:

    <li *ngFor="let starE of allstars | filterByTag: args">
    
    
     transform(items: any[], args: any[]): any {
        console.log('filterByTag items - ', items);
        console.log('filterByTag prop - ', args[0]);
        console.log('filterByTag tags - ', args[1]);
        return items;
    
    args = any[];
    args[0] = 'tagFilter';
    args[1] = tags;
    

    【讨论】:

    • 我的转换有一个包含所有项目的数组,没关系。我需要一组标签来执行过滤。如何正确构建 args?
    • 你需要 1 个数组。第一个元素将是所有项目的数组,第二个元素是标签数组。自 beta 16 以来,transform 函数无法接收 3 个参数。另请参阅 stackoverflow.com/questions/36816788/…
    • 谢谢,我已根据您的建议更改了代码:
    • ,但仍然是最后一个名为标记过滤器为空。我希望这里有来自我的组件的标签数组
  • 不客气。如果我的回答对你有帮助,请点赞我:)
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签