2015-10-28 18 views
5

này là gần nhất tôi đã nhận được on githubAngular2 DI với trang trí ES2016?

dịch vụ của tôi là

@Injectable() export class TodoService {}

Nhưng tôi không chắc chắn làm thế nào để tiêm nó vào thành phần của tôi sử dụng ES2016 trang trí. Thậm chí có thể, hoặc là trang trí cụ thể Typecript? Tôi biết trong TS có một tùy chọn emitDecoratorMetadata.

Trả lời

5
  1. Sử dụng providers hoặc viewProviders để "cung cấp" dịch vụ cho các thành phần: dịch vụ

  2. Tiêm vào constructor thành phần xác định các thông số các loại:

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    constructor(todoService: TodoService) { 
    this.todoService = todoService; 
    } 
} 

hoặc sử dụng Inject tham số trang trí.

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    constructor(@Inject(TodoService) todoService) { 
    this.todoService = todoService; 
    } 
} 

Trình trang trí thông số không thuộc ES2016 (bạn có thể coi nó là kiểu cụ thể của TypeScript). Nhưng chúng có thể là added to the standard later).

Nếu bạn thực sự muốn sử dụng ES6/ES7, sử dụng getter tĩnh cho parameters:

@Component({ 
    // ... 
    providers: [TodoService] 
}) 
class TodoComponent() { 

    static get parameters() { 
    return [[TodoService]]; // you can also return just [TodoService] 
    } 

    constructor(todoService) { 
    this.todoService = todoService; 
    } 
} 

Ngoài ra, tôi khuyên bạn nên đọc this article để hiểu rõ hơn angular2 Dependency Injection.

+0

Vì vậy, cả hai triển khai đó đều là Loại cụ thể? Không có cách nào để sử dụng ES2016 trang trí (mà không bao gồm trang trí tham số, nhờ liên kết)? – iksose

+0

@iksose Tôi đã thêm ví dụ cho ES6/ES7 – alexpods

+0

Hoàn hảo! Hoạt động tuyệt vời, cảm ơn @alexpods – iksose

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