Подтвердить что ты не робот

Как работает ngSwitch в Angular2?

Я пытаюсь использовать ngSwitch как в этом примере но я получаю сообщение об ошибке:

введите описание изображения здесь

Мой компонент:

  template: `
    <div layout="column" layout-align="center center">   
   <div [ng-switch]="value">
       <div *ng-switch-when="'init'">
     <button md-raised-button class="md-raised md-primary">User</button>
     <button md-raised-button class="md-raised md-primary">Non user</button>

     </div>
  <div *ng-switch-when="0">Second template</div>
  <div *ng-switch-when="1">Third Template</div>
</div>
  </div>`,
    directives: [NgSwitch, NgSwitchWhen, NgSwitchDefault]
 })

Мой плункер - wizard.ts

Что я пропустил? Спасибо вам

4b9b3361

Ответ 1

Обновление

См. https://angular.io/api/common/NgSwitch

оригинальный

Шаблоны чувствительны к регистру (начиная с бета-версии 47 AFAIR). Селекторы директивы (атрибута) были изменены на случай верблюда. Например, от ng-switch до ngSwitch.

Названия тегов по-прежнему используют тире для совместимости с веб-компонентами. Например <router-link>, <ng-content>.

Подробнее о ngSwitchCase

<container-element [ngSwitch]="switch_expression">
  <some-element *ngSwitchCase="match_expression_1">...</some-element>
</container-element>
<container-element [ngSwitch]="switch_expression">
  <some-element *ngSwitchCase="match_expression_1">...</some-element>
  <some-element *ngSwitchCase="match_expression_2">...</some-element>
  <some-other-element *ngSwitchCase="match_expression_3">...</some-other-element>
  <ng-container *ngSwitchCase="match_expression_3">
    <!-- use a ng-container to group multiple root nodes -->
    <inner-element></inner-element>
    <inner-other-element></inner-other-element>
  </ng-container>
  <some-element *ngSwitchDefault>...</some-element>
</container-element>
<container-element [ngSwitch]="switch_expression">
  <some-element *ngSwitchCase="match_expression_1">...</some-element>
  <some-other-element *ngSwitchDefault>...</some-other-element>
</container-element>

Ответ 2

Старый способ


Рабочий демонстрационный пример. вы можете проверить консоль браузера

изменено ng-switch на ngSwitch
изменен ng-switch-when на ngSwitchWhen

<div layout="column" layout-align="center center">

       <div [ngSwitch]="value">
      <div *ngSwitchWhen="'init'">
         <button md-raised-button class="md-raised md-primary">User</button>
         <button md-raised-button class="md-raised md-primary">Non user</button>

      </div>
      <div *ngSwitchWhen="0">Second template</div>
      <div *ngSwitchWhen="1">Third Template</div>
    </div>
 </div>
   <button md-fab
 class="md-fab wizard_button--next"
  aria-label="about"
  (click)="onNext()">
<i class="material-icons" md-icon="">play_arrow</i>
 </button>


Новый способ

ANGULAR.2.0.0 ИЛИ Final Relase


ОБНОВЛЕНИЕ: как использовать ngSwitch в Angular2.0.0 или окончательный выпуск

Обратите внимание, что в финальной версии все изменилось, поэтому, если вы используете окончательный выпуск, пройдите ниже простого примера.

Простая DEMO: http://plnkr.co/edit/IXmUm2Th5QGIRmTFBtQG?p=preview

@Component({
  selector: 'my-app',
  template: `
  <button (click)="value=1">select - 1</button>
  <button (click)="value=2">select - 2</button>
  <button (click)="value=3">select - 3</button>
  <h5>You selected : {{value}}</h5>

  <hr>
  <div [ngSwitch]="value">

     <div *ngSwitchCase="1">1. Template - <b>{{value}}</b> </div>
     <div *ngSwitchCase="2">2. Template - <b>{{value}}</b> </div>
     <div *ngSwitchCase="3">3. Template - <b>{{value}}</b> </div>
     <div *ngSwitchDefault>Default Template</div>

  </div>
  `,

})
export class AppComponent {}

Ответ 3

Три вещи, которые следует иметь в виду ngSwitch, ngSwitchCase и ngSwitchDefault.

  • ngSwitch - установите property value в model. Например - viewMode, который является свойством в вашем компоненте.

  • ngSwitchCase. Определяет, что делать при value property, определенном в ngSwitchChanges. Напр. когда viewMode = 'map'

  • ngSwitchDefault. Определяет, что делать, если value не соответствует. Напр. когда viewMode=undefined. По умолчанию будет rendered.

Еще одна важная точка заключается в том, что нам нужно установить [ngSwitchCase] в HTML-элемент <template></template>, иначе это не сработает. Angular автоматически преобразует его в тег <div>.

<div [ngSwitch]="'viewMode'">
  <template [ngSwitchCase]="'map'" ngSwitchDefault> 
     Map View Content...   
   </template>      
   <template [ngSwitchCase]="'list'"> 
      List View Content...
  </template>
</div>

Удачи.

Ответ 4

Существует также * ngSwitchDefault, который я не видел в документации на сайте. Так же, как и название, оно будет по умолчанию, если оно не соответствует другим случаям.

Это в основном голова, если кто-то сталкивается с этим.