将枚举值传递给角度2分量

tra*_*rap 5 typescript angular2-template angular

我有一个枚举,

并希望从模板传递枚举值。这怎么可能?

export enum FIELDS {
    GENDER = <any>'Gender',
    SALUTATION = <any>'Salutation',
    FIRSTNAME = <any>'First Name',
    LASTNAME = <any>'Last Name',
    EMAIL_ADDRESS = <any>'Email Address',
    COUNTRY = <any>'Country',

}
Run Code Online (Sandbox Code Playgroud)

我的模板。在这里我想传递枚举值

 [ngClass]="{'error':validate(FIELDS.COUNTRY)}" 
Run Code Online (Sandbox Code Playgroud)

//这将引发错误:无法获取未定义或空引用的属性COUNTRY。

我的组件:

@Component({
  selector: 'row-general',
  template: require('./modify-invalid-row-general.component.html'),
  styleUrls: ['./app/nedit/modify-invalid-row/modify-invalid-row.component.css']
})
export class ModifyInvalidRowGeneralComponent {

  @Input() row: UploadRow;
  @Input() columns: ConfigColumn[];

  @Output() validateRow = new EventEmitter<UploadRow>();

  public validate(field: string): boolean {

    let invalidFields: string[] = [];
    if (this.row.invalidFields != null)
      invalidFields = this.row.invalidFields.split(';');
    for (let i = 0; i < invalidFields.length; i++) {
       if (invalidFields[i].trim() == field.trim())
        return true;
    }
    return false;
  }
Run Code Online (Sandbox Code Playgroud)

如果我通常在组件中调用FIELDS.COUNTRY,则会得到值“ Country”。那就是我所需要的。

有人知道,如何传递枚举值?

提前Thx

Vis*_*hnu 7

只是为了更新 Angular 4+ 版本和 TypeScript 2.4 及更高版本的答案。

将枚举传递给 Angular 组件要简单得多。

 export enum PersonTypes {
  MALE = 'male',
  FEMALE = 'female'
}
@Component({
  selector: 'app-person-info'
})
export class PersonComponent implements OnInit {

  @Input() type: PersonTypes;
}
Run Code Online (Sandbox Code Playgroud)

在另一个容器中使用 PersonComponent:

@Component({
  selector: 'app-container'
})
export class AppContainerComponent implements OnInit {

  personType = PersonTypes.MALE;
}
Run Code Online (Sandbox Code Playgroud)

在视图模板中:

<app-person-info [type]="personType"></app-person-info>
Run Code Online (Sandbox Code Playgroud)

如果您需要访问所有enum属性:然后在容器应用程序中,展开personType = PersonTypes

并相应地使用属性。


Gil*_*niv 5

您无法直接从模板访问枚举。或者,您可以将它们复制到组件中,然后在组件中使用它。

@Component({
  selector: 'row-general',
  template: require('./modify-invalid-row-general.component.html'),
  styleUrls: ['./app/nedit/modify-invalid-row/modify-invalid-row.component.css']
})
export class ModifyInvalidRowGeneralComponent {

  @Input() row: UploadRow;
  @Input() columns: ConfigColumn[];

  @Output() validateRow = new EventEmitter<UploadRow>();

  FILEDS:any=Object.assign({},FIELDS);

  public validate(field: string): boolean {

    let invalidFields: string[] = [];
    if (this.row.invalidFields != null)
      invalidFields = this.row.invalidFields.split(';');
    for (let i = 0; i < invalidFields.length; i++) {
       if (invalidFields[i].trim() == field.trim())
        return true;
    }
    return false;
  }
Run Code Online (Sandbox Code Playgroud)

我使用Object.assign来获取枚举对象并复制它(引用它是行不通的)。现在您的组件中已经有了枚举实例,您也可以在模板中自由使用它。

  • 为什么“引用它不起作用”?根据我的经验,“readonly FIELDS = FIELDS;”将工作得很好。 (4认同)