2017-02-26 2 views
7

Ich versuche, einen ENUM-Wert zu verwenden, um den ausgewählten Wert eines HTML-Attribut zu setzen:Angular2 Verwendung Enum-Wert in html Wert Attribute

export enum MyEnum { 
    FirstValue, 
    SecondValue 
} 
export function MyEnumAware(constructor: Function) { 
    constructor.prototype.MyEnum = MyEnum; 
} 

@MyEnumAware 
@Component({ 
    templateUrl: "./lot-edit.component.html", 
    styleUrls: ["./lot-edit.component.css"], 
}) 
export class LotEditComponent implements OnInit { 
    @Input() myEnumValue: MyEnum ; 

}

<td><input name="status" type="radio" [value]="MyEnum.FirstValue" [(ngModel)]="myEnumValue"></td> 
<td><input name="status" type="radio" [value]="MyEnum.SecondValue" [(ngModel)]="myEnumValue"></td> 

aber ich „bekommen kann nicht lesen Eigenschaft 'FirstValue' von undefined "

Gibt es eine Möglichkeit, einen Enum-Wert als Wert von HTML-Attributen zu verwenden?

+0

https://stackoverflow.com/questions/45799745/pass-enum-value-to-angular-2-component/45800962#45800962 –

Antwort

12

Ihre Vorlage kann nur auf Membervariablen der Komponentenklasse zugreifen. Wenn Sie also die Werte des Enums verwenden möchten, weisen Sie es einer Membervariablen zu (Enum).

In Ihrer Komponente,

export class MyComp { 
    MyEnum = MyEnum; 
    ..... 
} 

Dann bist du frei, um die Elemente der Enumeration in Ihrer Vorlage zuzugreifen.

+0

Ist das eine richtige Übung zu tun? Ich würde es nicht sagen. –

+0

Warum nicht? – snorkpete

+0

Ich verwende eine Variation dieser Technik regelmäßig, wo ich ein Objekt habe, dessen Eigenschaften Strings sind, die ich als Konstanten behandle, und ich würde dieses Objekt bei Bedarf an verschiedene Komponenten anhängen. Das gebräuchlichste Beispiel ist das Definieren projektspezifischer Namen für die Materialdesignsymbole, die ich in diesem Objektliteral verwenden möchte, und dann das Verwenden dieses Objektliterals, wo immer ich es brauche. – snorkpete

2

Sie einen ENUM verwenden können, wie unten

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
     <input type="text" [(ngModel)]="value"/> 
    </div> 
    `, 
}) 
export class App { 
    name:string; 
    myValue:any= MyEnum; 
    value:string; 
    constructor() { 
    this.name = 'Angular2'; 
    this.value=this.myValue[1]; 
    console.log(this.value); 
    } 
} 

zu html-Element zuweisen Da Sie verwenden [(ngModel)] auf Eingabeelement, können Sie nicht auf [Wert] Eigenschaft des Eingabeelement zugeordnet werden.

LIVE DEMO

-1

mit kantigem 2 // Enum

export enum IType 
{ 
    Vegetables = 0, 
    Fruits = 1, 
    Fish = 2 
} 

// Winkel 2 Komponente in Art Skript

import {IType} from '/itype'; 
export class DataComponent 
{ 
getType(id:number):any 
{ 
     return IType[id]; 
} 
} 

// in der HTML-Datei

<div> 
{{getType(1)}} 
</div> 
+0

Ich bin mir nicht sicher, ob dies die Frage beantwortet. Sie verwenden keine Aufzählung im HTML, Sie verwenden eine Funktion, um den Aufzählungswert zu erhalten. IMHO es besiegt die Verwendung von Enums, wie jetzt habe ich eine magische Zahl in der HTML-Vorlage Ich habe absolut keine Ahnung, woher es kommt. –