Angular2 utiliser la valeur enum dans l'attribut de valeur html

j'essaie d'utiliser une valeur enum pour définir la valeur sélectionnée d'un attribut 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>

mais j'ai "Impossible de lire la propriété 'FirstValue' undefined"

Existe-t-il un moyen d'utiliser une valeur enum comme valeur des attributs html?

10
demandé sur wonbyte 2017-02-26 06:19:23

3 réponses

votre modèle ne peut accéder qu'aux variables membres de sa classe component. Ainsi, si vous voulez utiliser les valeurs d'enum, assignez-les (L'Enum) à une variable membre.

Dans votre composant,

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

alors vous êtes libre d'accéder aux éléments de l'enum dans votre modèle.

23
répondu snorkpete 2017-02-26 04:42:23

Vous pouvez utiliser un enum pour attribuer à l'élément html comme ci-dessous

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

puisque vous utilisez [(ngModel)] sur l'élément input, vous ne pouvez pas affecter à la propriété [value] de l'élément input.

LIVE DEMO

3
répondu Aravind 2017-02-26 05:05:46

Avec Angle 2 // enum

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

// angulaire 2 Composant de type script

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

// dans votre fichier html

<div>
{{getType(1)}}
</div>
-1
répondu Muhamed Shafeeq 2018-06-05 08:33:50