【问题标题】:Using Angular pipes to set css class使用 Angular 管道设置 css 类
【发布时间】:2020-11-25 00:08:57
【问题描述】:

我有一个角度材料自动完成功能,允许用户选择多个选项。用户选择的选项必须以红色显示,以表明它们已被选中。如果用户再次选择它们,则该选项将被取消选择。我知道在模板中使用类方法对性能不利,所以我创建了一个管道来实现这一点。但是,管道仅在组件加载时接收下拉列表中的值。

我该如何解决这个问题?

<mat-form-field>
  <input type="text" placeholder="Advisor Name/Port ID" aria-label="advisor-autocomplete" matInput
    [formControl]="advisorName" [matAutocomplete]="advisorAC"/>

  <mat-autocomplete #advisorAC="matAutocomplete"
    (optionSelected)="optionSelected($event)">
    <mat-option *ngFor="let advisor of filteredAdvisors | async" [value]="advisor.advisorPortId">
      <span
        [ngClass]="{'option--selected': advisor.advisorPortId | isSelected:selectedAdvisors}">{{ advisor.advisorFullName + ' (' + advisor.advisorPortId + ')' }}</span>
    </mat-option>
  </mat-autocomplete>
</mat-form-field>

selectedAdvisors 是存储所选选项的数组

@Pipe({
      name: 'isSelected',
    })
    export class IsSelectedPipe implements PipeTransform {
      transform(value: string, selectedValues: string[]): boolean {
        console.log(value);
        console.log(selectedValues);
    
        return selectedValues.includes(value);
      }
    }

我哪里错了?

【问题讨论】:

  • 你试过把它们移到圆括号上吗? (advisor.advisorPortId | isSelected:selectedAdvisors)
  • 还有管道用于格式化数据以供显示,不确定是否会检查传递给 ngClass 的对象是否有任何管道

标签: angular angular-pipe angular10


【解决方案1】:

试试

@Pipe({
    name: 'isSelected',
    pure: false // this is the key
})

【讨论】:

  • 我的方法正确吗?我可以使用管道来实现我想要实现的目标吗?推荐吗?
  • 嗯,这是一个“使用风险自负”的案例。对于一些繁重的逻辑,绝对不推荐它。但是用一个简单的你会没事的。
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2022-01-16
  • 1970-01-01
  • 2018-08-16
  • 2018-11-24
相关资源
最近更新 更多