I'm using Angular2 and TypeScript and I have an enum:
export enum Role { ServiceAdmin, CompanyAdmin, Foreman, AgentForeman, CrewMember, AgentCrewMember, Customer }
I want to use *ngFor to iterate over the enum. What is the best way to do this? Must I create a Pipe? Or is there a simpler way?
Enums don't have methods for iteration, like forEach() or iterator(). Instead, we can use the array of the Enum values returned by the values() method.
Iterating over the keys Of course, it's also possible to loop over the keys of a string enum, using Object.
Enums allow a developer to define a set of named constants. Using enums can make it easier to document intent, or create a set of distinct cases. TypeScript provides both numeric and string-based enums.
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: ` <div *ngFor="let item of keys()"> {{ item }} </div> ` }) export class YourComponent { role = Role; keys() : Array<string> { 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With