Spec-Zone.ru › Angular

@switch

Блок @switch создан по образцу оператора switch в JavaScript:

Синтаксис

@switch (condition) {
  @case (caseA) {
    Case A.
  }
  @case (caseB)
  @case (caseC) {
    Case B or C.
  }
  @default {
    Default case.
  }
}

Описание

Блок @switch отображает содержимое, выбранное одним из вариантов, соответствующих условному выражению. Значение условного выражения сравнивается с выражением варианта с помощью оператора ===.

Блок @default является необязательным и может быть опущен. Если ни один @case не соответствует выражению и блок @default отсутствует, ничего не отображается.

Для одного блока можно указать несколько условий, разместив подряд несколько операторов @case(...).

В @switch нет перехода к следующему варианту, поэтому вам не нужен аналог оператора break или return.

Исчерпывающая проверка типов

@switch поддерживает исчерпывающую проверку типов, позволяя Angular во время компиляции проверять, что обработаны все возможные значения объединённого типа.

Используя @default never;, вы явно указываете, что других вариантов быть не должно. Если впоследствии объединённый тип будет расширен и новый вариант не будет обработан с помощью @case, проверка типов шаблонов Angular сообщит об ошибке, помогая вам заранее обнаружить отсутствующие ветви.

@Component({
  template: `
    @switch (state) {
      @case ('loggedOut') {
        <button>Login</button>
      }

      @case ('loggedIn') {
        <p>Welcome back!</p>
      }

      @default never; // throws because `@case ('loading')` is missing
    }
  `,
})
export class AppComponent {
  state: 'loggedOut' | 'loading' | 'loggedIn' = 'loggedOut';
}

Если проверяемое выражение находится внутри объединённого типа, необходимо явно указать выражение, для которого нужно проверить полноту обработки всех вариантов.

@Component({
  template: `
    @switch (state.mode) {
      @case ('show') { {{ state.menu }}; }
      @case ('hide') {}
      @default never(state);
    }
  `,
})
export class App {
  state!: {mode: 'hide'} | {mode: 'show'; menu: number};
}

Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/core/@switch

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API