2017-08-21 45 views
1

我有一個枚舉,將枚舉值傳遞給角2組件

並希望從模板傳遞枚舉值。這怎麼可能?

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', 

} 

我的模板。在這裏我想通過枚舉值

[ngClass]="{'error':validate(FIELDS.COUNTRY)}" 

//這將引發錯誤:無法獲取未定義或空引用的屬性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; 
    } 

如果我normaly打電話FIELDS.COUNTRY在我得到的值 '國家' 的組成部分。這就是我所需要的。

有人知道,我怎麼能通過枚舉值?

Thx提前

+0

枚舉都不能在運行 –

+0

可以有別的選擇嗎? – trap

+0

顯示組件的完整代碼 –

回答

2

您無法直接訪問枚舉模板。 或者,您可以將它們複製到您的組件中,然後在組件中使用它。

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

我用Object.assign採取枚舉對象,並將其複製(參考它不會工作)。 現在你已經在你的組件中枚舉了實例,並且你可以自由地將它用於你的模板。

0

您必須將枚舉設置爲組件類的屬性。

export class ModifyInvalidRowGeneralComponent { 
    public fields: FIELDS; 
    // ... 

    // takes parameter of type FIELDS enum 
    public validate(field: FIELDS): boolean { 

而在你的HTML:

[ngClass]="{'error':validate(fields.COUNTRY)}"