Comment utiliser ngSwitch dans angular2
Depuis deux jours j'essaie d'obtenir ngSwitch de travailler dans angulaire 2.1.0. Mais il semble impossible de le faire fonctionner.
J'ai toujours Pas de fournisseur pour NgSwitch. Ci-dessous mon code -
Modèle
<template [ngSwitch]="buttonSelector">
<a class="btn" [ngClass]="buttonSizeClass" *ngSwitchCase="'link'" href="#">
<span class="btn__text">
<ng-content></ng-content>
</span>
</a>
</template>
Composant -
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-inked-btn',
templateUrl: './inked-btn.component.html',
styleUrls: ['./inked-btn.component.css'],
inputs: ['buttonSize', 'buttonType', "buttonSelector"]
})
export class InkedBtnComponent implements OnInit {
public buttonSize: string;
public buttonType: string;
public buttonSelector: string;
public buttonSizeClass: any;
constructor() { }
ngOnInit() {
this.buttonSizeClass = {
'btn--lg': this.buttonSize === 'large',
'btn--sm': this.buttonSize === 'small',
'btn--primary': this.buttonType === 'primary'
}
}
}
Voici ma configuration du module -
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { HeaderComponent } from './header/header.component';
import { FooterComponent } from './footer/footer.component';
import { InkedBtnComponent } from './inked-btn/inked-btn.component';
@NgModule({
imports: [
CommonModule,
RouterModule
],
declarations: [HeaderComponent, FooterComponent, InkedBtnComponent],
exports: [HeaderComponent, FooterComponent, InkedBtnComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class SharedModule { }
Ce module partagé est ensuite importé dans le module principal.
Où est la miss?
avez-vous importé BrowserModule?
BrowserModule est importé dans le module principal
BrowserModule est importé dans le module principal
OriginalL'auteur Abhishek Prakash | 2016-12-11
Vous devez vous connecter pour publier un commentaire.
https://angular.io/docs/ts/latest/api/common/index/NgSwitch-directive.html
ngSwitch
ne peut pas être sur un<template>
élément, seulement sur des éléments réels comme<div>
Seulement
ngSwitchCase
peut être appliquée à<template>
élémentsSinon depuis final
ng-container
peut être utilisé à la place de<template>
avec la plus commune de la syntaxe:Pouvez-vous essayer de reproduire dans plnkr.co/modifier/HkKZlnBnLHikk0ciAPVH?p=preview?
Mon mauvais. Son travail très bien. J'ai utilisé [ngSwitchCase] instaed de *ngSwitchCase.
Un
*
avant une directive fait Angular2 l'étendre à un<template [directive]=...
>, et, par conséquent, les résultats pour le même comportement qu'avant.*
est juste syntaxique shugar de sorte que vous n'avez pas besoin d'ajouter<template ...>
explicitement.Si vous avez un
<template>
élément, vous devez utiliser la syntaxe canonique[ngSwitchCase]="expression"
au lieu de*ngSwitchCase="expression"
OriginalL'auteur Günter Zöchbauer
Vous avez besoin d'importer
ngSwitch
deangular2/common
Bonne idée si vous souhaitez réduire les importations, par exemple parce que certains ngc incompatibilité, ou parce que l'arbre secouant ne fonctionne pas si bien, comme il a été dit dans les docs.
OriginalL'auteur Arun Ghosh
J'ai la même erreur quand j'ai
[ngSwitch]
de liaison et*ngIf
la directive sur le même élément.OriginalL'auteur wawka
Également confronté à la même question, assurez-vous que
NgSwitch
ne doit pas être pas de modèle, il devrait être sur l'élément réel comme Div*ngSwitchCase="expression"
devrait être imbriquées à l'intérieurNgSwitch
élémentOriginalL'auteur Pranoy Sarkar