2015-12-21 19 views
17

Tôi đang phát triển một ứng dụng Angular2. Tôi cần thêm hành vi đặc biệt cho tất cả các liên kết như vậy trong 1.xi góc sẽ chỉ cần viết một chỉ thị như thế này:Đăng ký toàn cầu một chỉ thị trong angular2

angular.module('whatever.module', []).directive('href', function() { 
    return { 
     restrict: 'A', 
     link: function($scope, $element, $attrs) { 
      // do stuff 
     } 
    }; 
}); 

Trong angular2 tôi có thể viết một chỉ thị như thế này:

@Directive({ 
    selector: '[href]', 
}) 

export class MyHrefDirective { 
    constructor() { 
     // whatever 
    } 
} 

Nhưng làm thế nào trên tôi có thể nói cho ứng dụng sử dụng chỉ thị đó trên toàn cầu không? Tôi có rất nhiều lượt xem với các liên kết trên chúng. Tôi có phải nhập khẩu nó và chỉ định nó trong mảng directives trong mỗi thành phần (đó là A LOT)?

Tôi đã cố gắng tiêm nó vào bootstrap chức năng như bạn đang phải làm với các dịch vụ có một trường hợp trên toàn cầu nhưng mà không làm việc

+0

Tôi nghĩ rằng nếu bạn cung cấp chỉ thị globaly của tôi có nghĩa là tại thời điểm Bootstraping thành phần gốc sau đó không cần phải nhập khẩu trong mảng của mỗi commponent –

+0

Nếu bạn đã đọc câu cuối cùng trong câu hỏi của tôi, bạn đã biết rằng tôi đã thử điều đó rồi. – kamilkp

Trả lời

30

hiểu biết của tôi là bạn phải chọn tham gia vào tất cả các tùy chỉnh chỉ thị ở cấp thành phần. Chỉ PLATFORM_DIRECTIVES được bao gồm ngầm (ngFor, ngIf, v.v.).

Tuy nhiên, bạn có thể đăng ký chỉ thị riêng của bạn như một PLATFORM_DIRECTIVE

import { provide, PLATFORM_DIRECTIVES } from '@angular/core'; 

bootstrap(RootCmp, [ 
    provide(PLATFORM_DIRECTIVES, {useValue: YourCustomDirective, multi: true}), 
]); 

Đây là một bài viết mà nói thêm về quá trình: http://blog.thoughtram.io/angular2/2015/11/23/multi-providers-in-angular-2.html

EDIT: tôi xem xét việc này ít quan tâm vì các thành phần được khai báo ở cấp mô-đun. Điều này có nghĩa là sự lặp lại ít hơn nhiều vì bạn không còn phải khai báo các thành phần con ở cấp thành phần riêng lẻ nữa.

+1

Cảm ơn bạn. Đó là một câu trả lời tuyệt vời, tôi đã không nhận thức được điều đó. Làm việc như một say mê. – kamilkp

+1

Lưu ý: Bất kỳ ' _PROVIDERS' nào giống như' HTTP_PROVIDERS' có thể được chuyển trực tiếp vào danh sách trong khi tất cả các chỉ thị phải được chuyển bằng cách sử dụng 'cung cấp (..)' như được giải thích ở trên hoàn toàn bởi TGH. Nó không cần phải là một chỉ thị tùy chỉnh mà ngay cả các chỉ thị dựa trên thư viện npm bên ngoài, như các chỉ thị từ thư viện material2 phải được chuyển vào hàm bootstrap theo cách này. –

+1

Có thể muốn cập nhật câu trả lời này vì nó không còn là người di cư –

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