2016-03-10 15 views
29

Chúng ta có thể sử dụng enums trong một mẫu khung nhìn angular2 không?Vượt qua các enums trong các khung nhìn góc nhìn2

<div class="Dropdown" dropdownType="instrument"></div> 

vượt qua chuỗi như là đầu vào:

enum DropdownType { 
     instrument, 
     account, 
     currency 
    } 

    @Component({ 
     selector: '[.Dropdown]', 
    }) 
    export class Dropdown { 

     @Input() public set dropdownType(value: any) { 

      console.log(value); 
     }; 
    } 

Nhưng làm thế nào để vượt qua một cấu hình enum? Tôi muốn một cái gì đó như thế này trong mẫu:

<div class="Dropdown" dropdownType="DropdownType.instrument"></div> 

Thực tiễn nào là tốt nhất?

được sửa đổi: Tạo một ví dụ:

import {bootstrap} from 'angular2/platform/browser'; 
    import {Component, View, Input} from 'angular2/core'; 

    export enum DropdownType { 

     instrument = 0, 
     account = 1, 
     currency = 2 
    } 

    @Component({selector: '[.Dropdown]',}) 
    @View({template: ''}) 
    export class Dropdown { 

     public dropdownTypes = DropdownType; 

     @Input() public set dropdownType(value: any) {console.log(`-- dropdownType: ${value}`);}; 
     constructor() {console.log('-- Dropdown ready --');} 
    } 

    @Component({ selector: 'header' }) 
    @View({ template: '<div class="Dropdown" dropdownType="dropdownTypes.instrument"> </div>', directives: [Dropdown] }) 
    class Header {} 

    @Component({ selector: 'my-app' }) 
    @View({ template: '<header></header>', directives: [Header] }) 
    class Tester {} 

    bootstrap(Tester); 

Trả lời

39

Tạo một tài sản cho enum của bạn trên các thành phần cha mẹ đến lớp thành phần của bạn và gán enum với nó, sau đó tham khảo tài sản đó trong mẫu của bạn.

export class Parent { 
    public dropdownTypes = DropdownType;   
} 

export class Dropdown {  
    @Input() public set dropdownType(value: any) { 
     console.log(value); 
    }; 
} 

Điều này cho phép bạn liệt kê enum như mong đợi trong mẫu của bạn.

<div class="Dropdown" dropdownType="dropdownTypes.instrument"></div> 
+1

Dựa trên cập nhật của bạn, hãy di chuyển khai báo tài sản enum của bạn thành thành phần gốc. –

+0

Ồ, chắc chắn, nhận được từ ngữ cảnh của nó. – McLac

+1

Downvoter, quan tâm để giải thích? –

31

Đây là giải pháp.

Tạo một enum

enum ACTIVE_OPTIONS { 
    HOME = 0, 
    USERS = 1, 
    PLAYERS = 2 
} 

Tạo thành phần của bạn, hãy chắc chắn danh sách enum của bạn sẽ có typeof

export class AppComponent { 
    ACTIVE_OPTIONS: typeof ACTIVE_OPTIONS = ACTIVE_OPTIONS; 
    active:ACTIVE_OPTIONS; 
} 

Tạo tầm nhìn của bạn

<li [ngClass]="{'active':active==ACTIVE_OPTIONS.HOME}"> 
    <a router-link="/in"> 
    <i class="fa fa-fw fa-dashboard"></i> Home 
    </a> 
</li> 

ENJOY

+3

Giải pháp tốt hơn so với giải pháp được chấp nhận. Tôi đoán nó sử dụng một số tính năng TS mới. –

+2

Không phải là một chuyên gia bản thân mình, vì vậy tôi thực sự phải đặt câu hỏi: giải pháp này luôn tốt hơn so với David L.? Điều này có ít dòng mã hơn, nhưng về mặt sử dụng bộ nhớ, nó có thể tạo một danh sách cho mỗi thể hiện của lớp thành phần máy chủ ... Và nếu điều này là đúng (không nói nó là!), Không có nhiều vấn đề khi đối phó với AppComponent, nhưng giải pháp có thể không phải là tốt nhất trong trường hợp của một CustomerComponent hoặc một cái gì đó lặp lại nhiều hơn. Tôi có đúng không? –

Các vấn đề liên quan