2017-02-26 8 views
7

Próbuję użyć wartości enum aby ustawić wybraną wartość atrybutu HTML:Angular2 wartość użycie enum w atrybucie wartości html

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> 

jednak otrzymuję „nie można odczytać właściwość "FirstValue" nieokreślonego "

Czy istnieje sposób użycia wartości wyliczeniowej jako wartości atrybutów html?

+0

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

Odpowiedz

12

Twój szablon może tylko uzyskać dostęp do zmiennych członków swojej klasy komponentów. Tak więc, jeśli chcesz użyć wartości wyliczenia, przypisz je (Enum) do zmiennej członkowskiej.

W komponentu,

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

Wtedy jesteś wolny, aby uzyskać dostęp do elementów wyliczenia w szablonie.

+0

Czy to właściwa praktyka? Nie powiedziałbym tak. –

+0

Dlaczego nie? – snorkpete

+0

Regularnie używam odmiany tej techniki, w której mam obiekt, którego właściwości są ciągami, które traktuję jako stałe, i w razie potrzeby dołączę ten obiekt do różnych komponentów. Najczęstszym przykładem jest definiowanie nazw konkretnych projektów dla ikon projektowania materiałów, które chcę użyć w tym dosłownym obiekcie, a następnie użycie tego obiektu dosłownie, gdziekolwiek go potrzebuję. – snorkpete

2

Można użyć enum przypisać do elementu html jak poniżej

@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); 
    } 
} 

Ponieważ używasz [(ngModel)] na elemencie wejściowym, nie można przypisać do [wartość] własności elementu wejściowego.

LIVE DEMO

-1

Z kątowa 2 // enum

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

// Element kątowy 2 w script type

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

// w pliku html

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

Nie jestem pewien tej odpowiedzi na pytanie. Nie używasz wyliczenia w html, używasz funkcji, aby uzyskać wartość wyliczenia. IMHO to pokonuje użycie wyliczeń, ponieważ teraz mam magiczną liczbę w szablonie html. Nie mam absolutnie żadnego pojęcia, skąd pochodzi. –