2016-07-31 8 views
0

übergeben Ich möchte einen Enum-Typ in meinem HTML zu einer Methode übergeben.kann enum type nicht richtig in html

export enum ListType {typeOne, typeTwo, typeThree} 

jetzt in meiner Schaltfläche klicken ich dies tun wollen:

<button md-button 
      (click)="setListToDisplay(ListType.typeOne)" 
      class="md-primary">Matcher 
    </button 

dies die Funktion in den component.ts

ist
public setListToDisplay(type: ListType):void { 
    switch (type) { 
     case ListType.matcherView: 
     this.listToDisplay = this.listOneToDisplay; 
     case ListType.expediteView: 
     this.listToDisplay = this.listTwoToDisplay; 
     case ListType.typeThree: 
     this.listToDisplay = this.listThToDisplay; 
    } 
    } 

dies mein Fehler ist:

TypeError: Cannot read property 'length' of undefined in [listToDisplay in [email protected]:57]

aber es dosent Arbeit, wie soll ich tun es richtig?

+0

Was meinst du mit „es funktioniert nicht“? Gibt es Fehler? –

+0

Was ist der Umfang Ihrer Enum? Es sollte als Ihre Komponenteneigenschaft verwendet werden, um in seinem HTML vertraut zu sein. – AranS

+0

@NitzanTomer hat meinen Fehler hinzugefügt, sorry vergessen –

Antwort

1

Sie müssen eine Eigenschaft erstellen innerhalb die @Component -decorated-Klasse für Sie in der Lage sein, die Enumeration in der Vorlage verweisen.

Also, wenn Sie eine Vorlage/Code, ähnlich dem unten haben, fügen Sie die Eigenschaft wie gezeigt:

import { stuff } from 'whatever'; 
... 

export enum ListType {typeOne, typeTwo, typeThree} 

@Component({ 
    selector: 'my-component', 
    template: ` 
    ... 
    <button md-button 
      (click)="setListToDisplay(ListType.typeOne)" 
      class="md-primary">Matcher 
    </button> 
    ... 
    ` 
    ... 
}) 
export class MyComponent { 

    public setListToDisplay(type: ListType):void { 
    switch (type) { 
     case ListType.matcherView: 
     this.listToDisplay = this.listOneToDisplay; 
     case ListType.expediteView: 
     this.listToDisplay = this.listTwoToDisplay; 
     case ListType.typeThree: 
     this.listToDisplay = this.listThToDisplay; 
    } 
    } 

    // add a property with the enum name, like this: 
    public ListType = ListType; // <<<-------------------------------- add this property 

    // with the above you can now use the ListType.typeOne in the template. 

} 
Verwandte Themen