Angular 2 ngSwitchCase,OR运算符无法正常工作

Pal*_*diN 22 switch-statement or-operator ng-switch angular

我有多个switch语句,但在某些情况下我需要常见的情况.所以,我正在尝试

OR operator => ||

例:

        <ng-container [ngSwitch]="options">
            <ng-container *ngSwitchCase="'a'">Code A</ng-container>
            <ng-container *ngSwitchCase="'b'">Code B</ng-container>
            <ng-container *ngSwitchCase="'c'">Code C</ng-container>
            <ng-container *ngSwitchCase="'d' || 'e' || 'f'">Common Code</ng-container>
            <ng-container *ngSwitchDefault>Code Default</ng-container>
        </ng-container>
Run Code Online (Sandbox Code Playgroud)

输出:

if case = 'd' returns Common Code
else if case = 'e' and 'f' returns the Code Default 
Run Code Online (Sandbox Code Playgroud)

这里的第二个案例由多个案例组成,现在默认情况下case 'd'只有工作且不起作用case 'e' and 'f'.

我在ngSwitchCase文档中看不到任何多个案例:

https://angular.io/docs/ts/latest/api/common/index/NgSwitchCase-directive.html https://angular.io/docs/ts/latest/api/common/index/NgSwitch-directive.html

Angular 2不支持||运营商ngSwitchCase吗?

Gün*_*uer 66

如果您评估'd' || 'e' || 'f'结果是什么'd',何时options不是'd',那么它就不匹配.你不能用ngSwitchCase那种方式.

这可行:

    <ng-container [ngSwitch]="true">
        <ng-container *ngSwitchCase="options === 'a'">Code A</ng-container>
        <ng-container *ngSwitchCase="options === 'b'">Code B</ng-container>
        <ng-container *ngSwitchCase="options === 'c'">Code C</ng-container>
        <ng-container *ngSwitchCase="options === 'd' || options === 'e' || options === 'f'">Common Code</ng-container>
        <ng-container *ngSwitchDefault>Code Default</ng-container>
    </ng-container>
Run Code Online (Sandbox Code Playgroud)

  • 我认为在这种情况下使用*ngIf比使用ngSwitch更好.更少的代码,更多的可读性 (8认同)
  • 哇!你是'Angular God`:DI并不认为`[ngSwitch]`应该有真实的条件.;)谢谢你的出路.我几个小时都在挠头. (3认同)
  • 作品!关键点:[ngSwitch] ="true"将允许评估所有"SwitchCase条件"标签 (3认同)
  • @Mihail我也认为,直到我意识到默认情况下放置起来更加复杂 (3认同)

小智 17

我认为这种语法更好:

    <ng-container [ngSwitch]="options">
        <ng-container *ngSwitchCase="'a'">Code A</ng-container>
        <ng-container *ngSwitchCase="'b'">Code B</ng-container>
        <ng-container *ngSwitchCase="'c'">Code C</ng-container>
        <ng-container *ngSwitchCase="['d', 'e', 'f'].includes(options) ? options : !options">Common Code</ng-container>
        <ng-container *ngSwitchDefault>Code Default</ng-container>
    </ng-container>
Run Code Online (Sandbox Code Playgroud)


小智 9

感谢 Bahador R,帮我创建了一个管道。

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'switchMultiCase'
})
export class SwitchMultiCasePipe implements PipeTransform {

    transform(cases: any[], switchOption: any): any {
        return cases.includes(switchOption) ? switchOption : !switchOption;
    }

}
Run Code Online (Sandbox Code Playgroud)

用于

<ng-container [ngSwitch]="switchOption">
...
<div *ngSwitchCase="['somecase', 'anothercase'] | switchMultiCase:switchOption">
Run Code Online (Sandbox Code Playgroud)