2015-10-15 20 views
8

Có thể đây là hai câu hỏi trong một câu hỏi. Tôi biết bạn phải khai báo rõ ràng các chỉ thị sẽ được sử dụng bên trong một Component cho Angular 2. Liệu điều này có truyền cho trẻ em Các thành phần của Component, và nếu không, nó có thể được tạo ra không? Thứ hai, làm các biến khai báo trên các thành phần tuyên truyền cho trẻ em, hoặc họ phải được thông qua một cách rõ ràng cho các thành phần?Chỉ thị/phạm vi thừa kế

+1

Họ có kế hoạch triển khai những gì bạn đề cập. [Xem vấn đề này] (https://github.com/angular/angular/issues/2844). Tuy nhiên, nó liên tục bị đẩy lùi, vì vậy bạn sẽ phải đợi. –

+0

Tôi đoán đây là một hạt cứng để crack bởi vì ý tưởng mô đun chỉ ra rằng một thành phần/mô-đun không có phụ thuộc được ẩn. Nếu bạn đã di chuyển thành phần con của bạn ở một nơi khác, nó sẽ phá vỡ. Điều này thường được giải quyết với việc thừa kế hoặc tiêm phụ thuộc, tạo ra một liên kết mạnh mẽ giữa phần tử con và thành phần cha và lần lượt làm cho thành phần con của bạn có thể dễ dàng di chuyển xung quanh. – jornare

+0

Tôi cho rằng có ý nghĩa trong cùng một cách như lập trình chức năng sau đó ... không may nó có nghĩa là tôi có một số công việc để làm;) – djvs

Trả lời

2

Kể từ phiên bản beta.14, bạn phải liệt kê rõ ràng tất cả các chỉ thị đã sử dụng trong mảng 's directives. Đối với phần thứ hai của câu hỏi, các biến được khai báo trên thành phần (ví dụ: this.name) không được truyền cho các thành phần con. Để đạt được điều đó, bạn phải truyền chúng một cách rõ ràng trong các mẫu thành phần sử dụng các thuộc tính như <child [item]="parentItem"></child> và thành phần con phải chứa thuộc tính @Input item.

EDIT: Để kết hợp làm rõ từ nhận xét ... Có thể đăng ký chỉ thị trên toàn cầu nhưng chỉ trong chức năng bootstrap. Chỉ thị được khai báo trên bố mẹ sẽ NOT được thừa hưởng bởi thành phần con.

bootstrap(App, [ 
    PLATFORM_DIRECTIVES, 
    provide(PLATFORM_DIRECTIVES, {useValue: [SomeDirective, SomeComponent], multi:true}) 
]); 
+0

Bạn có thể làm cho direcitves toàn cầu có sẵn với 'cung cấp (PLATFORM_DIRECTIVES, {useValue: [SomeDirective, SomeComponent], multi: true}) ', cùng với các ống' bootstrap (Ứng dụng, [cung cấp (PLATFORM_PIPES, {useValue: RainbowizePipe, đa: true})]); ' –

+0

Cảm ơn bạn đã làm rõ – tomastrajan