angular - ngtemplateoutlet - ng-container vs ng-template
¿Cómo funciona ngSwitch en Angular2? (4)
Estoy tratando de usar ngSwitch como en este ejemplo, pero me sale un error:
Mi Componente:
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]
})
Mi plunker - wizard.ts
¿Qué me perdí? Gracias
Tres cosas a tener en cuenta ngSwitch
, ngSwitchCase
y ngSwitchDefault
.
ngSwitch : establece el
property value
deproperty value
delmodel
. Por ejemplo,viewMode
, que es una propiedad en su componente.ngSwitchCase : define qué representar cuando el
value
de laproperty
define enngSwitchChanges
. Por ej. cuandoviewMode = ''map''
ngSwitchDefault : define qué representar si el
value
no coincide. Por ej. cuandoviewMode=undefined
. El predeterminado serárendered
.
Otro punto importante es que debemos establecer [ngSwitchCase]
dentro de un elemento HTML <template></template>
, de lo contrario no funcionará. Angular
lo convertirá automáticamente en una etiqueta <div>
.
<div [ngSwitch]="''viewMode''">
<template [ngSwitchCase]="''map''" ngSwitchDefault>
Map View Content...
</template>
<template [ngSwitchCase]="''list''">
List View Content...
</template>
</div>
Buena suerte.
actualizar
Ver https://angular.io/api/common/NgSwitch
original
Las plantillas son sensibles a mayúsculas y minúsculas (desde beta.47 AFAIR). Los selectores de directivas (atributos) se cambiaron por camel case. Por ejemplo, de ng-switch
a ngSwitch
.
Los nombres de las etiquetas aún usan guiones para la compatibilidad con los componentes web. Por ejemplo <router-link>
, <ng-content>
.
Más detalles para 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>
También hay * ngSwitchDefault que no vi en la documentación en el sitio. Al igual que el nombre implica, se usará de manera predeterminada si no cumple con los otros casos.
Esto es principalmente un aviso si alguien se encuentra con esto.
Vieja forma
Demostración de trabajo . puedes consultar la consola del navegador cambiado ng-switch a ngSwitch
cambiado ng-switch-cuándo hacer 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>
Nueva manera
ANGULAR.2.0.0 O Relase final
ACTUALIZACIÓN : ¿Cómo usar ngSwitch en Angular2.0.0 o versión final ?Tenga en cuenta que las cosas han cambiado en la versión final, por lo que si está utilizando la versión final, por favor siga el ejemplo más simple.
DEMO simple: 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 {}