当前位置: 首页 > 知识库问答 >
问题:

角度管道返回值,但 ngFor 不会显示它们

武峻熙
2023-03-14

我有一个管道,它只过滤我的ngFor与精确的匹配,我通过点击过滤器参数来通过。

这是我的烟斗:

transform(werte: any[], kriterium: string, gruppe): any[] {
    if (!werte) {
      return [];
    }
    if (!gruppe || gruppe.length === 0) {
      return werte;
    }
    return werte.filter(it =>
      it[kriterium] === gruppe);
  }

这是我的HTML:

<mat-drawer-container class="example-container">
  <mat-drawer mode="side" opened class="side-nav">
    <!-- <mat-card class="mat-card">Kategorien:</mat-card> -->
    <div *ngFor="let skillGruppe of skillGruppen | unique:'skillGruppe'">
      <button mat-button class="filter">
        <div (click)="filtereSkills(filter.textContent)" #filter>
          {{ skillGruppe.skillGruppe }}
        </div>
      </button>
    </div>
  </mat-drawer>
  <mat-drawer-content>
    <div *ngIf="SKILLS?.length > 0; else noItem">
      <div *ngFor="let skill of SKILLS | filter:'skillGruppe':filterWert">
        <div class="skill">
          <mat-accordion>
            <mat-expansion-panel>
              <mat-expansion-panel-header>
                <mat-panel-title>{{ skill.skillname }} </mat-panel-title>
                <mat-progress-bar
                  class="progress-bar"
                  [value]="skill.skillwert"
                  [color]="'accent'"
                  [mode]="'buffer'"
                ></mat-progress-bar>
                <mat-panel-description> </mat-panel-description>
              </mat-expansion-panel-header>
              <div>{{ skill.skillBeschreibung }}</div>
            </mat-expansion-panel>
          </mat-accordion>
        </div>
      </div>
    </div>
    <ng-template #noItem>
      <app-data-loader></app-data-loader>
    </ng-template>
  </mat-drawer-content>
</mat-drawer-container>

当我单击带有id过滤器的div时,我更改了变量filterWert的值。然后我用这个值过滤我的ngFor。奇怪的是,它曾经有效过一段时间,但现在不再有效了,我不明白为什么。当我调试它时,我得到了从管道返回的值,但是ngFor不会显示它们。我犯的错误在哪里?

共有2个答案

臧友樵
2023-03-14

尝试将您的键值对(filter的参数)作为对象传递。

那你可以用这样的东西

export class FilterPipe implements PipeTransform {
    transform<T>(items: T[], filter: {key: string, value: any}): T[] {
        if (!items || !filter) {
            return items;
        }        
        return items.filter(item => item[filter['key']] == filter['value']);
    }
}
岳锦
2023-03-14

您正试图在< code>*ngFor指令中对集合进行操作,以便筛选集合而不是遍历它。

管道上的角留档附录指定不使用过滤器顺序操作对*ngFor指令th的管道。(https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe)

您可以做的是在将数据绑定到您的*ngFor指令之前对其进行过滤。例如:

public ngOnInit(): void {
    requestCollectionFromApi().subscribe(result => {
        skillGruppen = filter(result, 'skillGruppe');
    });
}

private filter(result: Array, unique: string): Array {
    // Process filter operation here and return new array with filtered data.
}

然后在超文本标记语言中,删除管道:

<div *ngFor="let skillGruppe of skillGruppen">
  <button mat-button class="filter">
     <div (click)="filtereSkills(filter.textContent)" #filter>
         {{ skillGruppe.skillGruppe }}
      </div>
    </button>
</div>

希望有帮助。

 类似资料:
  • 我是express mongo主干的新手。我通过主干收集从mongodb获取数据。fetch();作为回报,我得到了数据,但正如你在下面看到的。长度和型号数组显示为0,这是错误的。因为如果我向下钻取,我可以看到我所有的文档/模型。我做错了什么?下面是我在客户端的代码-主干 下面是我在server-express上的代码。正在响应url“/contacts”上获取的js 你们谁能解释一下出了什么问题

  • 当用户选择一个标记时,我只想显示包含该标记的博客。例如,当一个用户选择了'c''标签时,只会显示带有该标签的帖子。 我的设置如下:我有一组包含post标签的博客,其中包含标签: null 这将显示blog-thumbnail组件 下面的代码部分是我的问题所在。它不起作用: 我在这方面花了大量的时间。有人能解释我做错了什么吗?

  • 我正在做我的家庭作业,那就是用C语言复制unix命令shell。 我已经实现了直到后台运行的单个命令执行( 现在我正处于实现管道的阶段,我面临这个问题,对于大于1的管道,带有管道的子命令已经完成,但是最终输出不会显示在stdout上(最后一个命令的标准输入被替换为最后一个管道的读取) 我也在家长那里尝试了。 我的程序的出口是CONTROL-D,当我按下该键时,将显示输出(也将退出,因为我对CONT

  • 我有一个关于显示void类型的返回值的问题。因此trimLines是一个void类型的方法。我不明白如何显示void类型的方法,因为该方法没有返回任何东西,所以没有任何东西可以显示。由于采用字符串类型,这将导致错误。

  • 我的数据确实显示在console.log中,但实际上没有显示在表中,我在这里做错了什么?

  • 首先,ngfor中的标签没有要关联的标识,也没有要查找的任何其他标识。然而,我没有发现任何需要id的东西,在剑道页面上有许多例子显示了没有id的复选框的例子,所以我不认为这是问题(但肯定可能是错误的)。 其次,它们在ngFor循环中。我不知道为什么这会把它搞砸,但这是我能想到的一切。我搜索了一下,但找不到任何关于这里的问题或如何解决它的东西。 你知道我哪里出了问题或者我没有看到什么吗?我确实记录了