如何过滤ngfor

时间:2019-01-14 15:35:50

标签: angular ngfor

我正在Angular2 +中创建一个应用程序。我有一个页面,一个人可以在此页面上给人一种品质(请参见下图)。我正在对能力列表进行ngFor来创建能力和选择菜单,从中可以选择团队成员来获得能力。

然后针对每种能力,我都会进行ngFor的选择以获取每个团队成员。

这是我的代码:

HTML:

<div class="row" *ngFor="let competence of competences_list">
    <div class="col-7">
        <div class="competence">{{competence}}</div>
    </div>
    <div class="col-5">
        <!-- Form control -->
        <select class="form-control select-competence" #name (change)="changeList($event , name.value, name.id)" id="{{competence}}">
            <option value="" selected disabled hidden></option>
            <option *ngFor="let member of team_list2" value="{{member.name}}">{{member.name}}</option>
            <option value=""></option>
        </select>
    </div>
</div>

打字稿:

    this.competences_list = ['Zelfstandigheid', 'Creativiteit', 'Flexibiliteit',
        'Dominantie', 'Prestatiegerichtheid', 'Netwerken', 'Durf initiatief te nemen',
        'Reflecteren', 'Zelfkennis'];

    this.team_list2 = [
        { name: 'user1', chosen: false },
        { name: 'user2', chosen: false },
        { name: 'user3', chosen: false }
    ];

问题是我想根据先前的选择过滤这些值。因此,如果我选择第一个能力“ user1”,则“ user1”一定不能显示在第二个能力的选项列表中。这里的问题是双向绑定。我尝试使用管道,但是它会更新所有选项字段。

因此,如果选择== true->不要在options字段中显示它。但是使用* ngIf将更新所有选项字段。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

我会说解决方案正在使用*ngIf

Angular documentation上可以看到,您可以使用ng-container

<ng-container *ngFor="let h of heroes">
  <ng-container *ngIf="showSad || h.emotion !== 'sad'">
    <option [ngValue]="h">{{h.name}} ({{h.emotion}})</option>
  </ng-container>
</ng-container>

要使其适应您的代码:

<select class="form-control select-competence" #name (change)="changeList($event , name.value, name.id)" id="{{competence}}">
    <option value="" selected disabled hidden></option>
    <ng-container *ngFor="let member of team_list2">
        <ng-container *ngIf="!member.chosen">
            <option value="{{member.name}}">{{member.name}}</option>
        </ng-container>
    </ng-container>
    <option value=""></option>
</select>

但是,这有一个问题:它将从您选择它的权限中删除您的选项。如何解决?容易:检查是否选择了并且是否选择了当前能力。

(因为我还没有看完您的所有代码,所以我会想象一个函数可以返回分配给您的成员的能力,您很可能可以轻松地对其进行调整)

<select class="form-control select-competence" #name (change)="changeList($event , name.value, name.id)" id="{{competence}}">
    <option value="" selected disabled hidden></option>
    <ng-container *ngFor="let member of team_list2">
        <ng-container *ngIf="!member.chosen || member.name === getAssignedMember(competency)">
            <option value="{{member.name}}">{{member.name}}</option>
        </ng-container>
    </ng-container>
    <option value=""></option>
</select>

还有其他问题:请随时在评论中添加它们。