How can I use ngFor to iterate over Typescript Enum as an array of strings

后端 未结 11 1623
借酒劲吻你
借酒劲吻你 2020-12-13 12:03

I am using Angular2 and Typscript. I have an enum:

export enum Role {
    ServiceAdmin, CompanyAdmin, Foreman, AgentForeman, 
    CrewMember, AgentCrewMembe         


        
11条回答
  •  南笙
    南笙 (楼主)
    2020-12-13 12:24

    An enum is just an object.

    Your enum is written something like this in JavaScript:

    {
        0: "ServiceAdmin", 
        1: "CompanyAdmin", 
        2: "Foreman", 
        3: "AgentForeman", 
        4: "CrewMember", 
        5: "AgentCrewMember", 
        6: "Customer", 
        ServiceAdmin: 0, 
        CompanyAdmin: 1, 
        Foreman: 2, 
        AgentForeman: 3, 
        CrewMember: 4,
        AgentCrewMember: 5,
        Customer: 6
    }
    

    So you can iterate it this way (plnkr):

    @Component({
        ...
        template: `
        
    {{ item }}
    ` }) export class YourComponent { role = Role; keys() : Array { var keys = Object.keys(this.role); return keys.slice(keys.length / 2); } }

    Or would be better to create custom pipe:

    @Pipe({
      name: 'enumToArray'
    })
    export class EnumToArrayPipe implements PipeTransform {
      transform(data: Object) {
        const keys = Object.keys(data);
        return keys.slice(keys.length / 2);
      }
    }
    

    Example

    Update

    Typescript 2.4 allows enum members to contain string initializers like:

    enum Colors {
        Red = "RED",
        Green = "GREEN",
        Blue = "BLUE",
    }
    

    in this case you can just return Object.keys(data); from pipe.

提交回复
热议问题