18

Angular アプリケーションを開発しています。すべてのリンクに特別な動作を追加する必要があります。AngularJS では、次のようなディレクティブを記述します。

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

Angular では、次のようなディレクティブを記述できます。

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

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

しかし、そのディレクティブをグローバルに使用するようにアプリケーションに指示するにはどうすればよいでしょうか? リンク付きのビューがたくさんあります。それをインポートしてdirectives、それらのすべてのコンポーネントの配列で指定する必要がありますか (これはたくさんあります)?

bootstrapグローバルに1つのインスタンスを持つためにサービスで行うはずのように、関数に注入しようとしましたが、うまくいきませんでした

4

1 に答える 1

30

私の理解では、コンポーネント レベルですべてのカスタム ディレクティブをオプトインする必要があります。PLATFORM_DIRECTIVES のみが暗黙的に含まれています (ngFor、ngIf など)。

ただし、独自のカスタム ディレクティブを PLATFORM_DIRECTIVE として登録できます。

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

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

このプロセスについて詳しく説明している記事は次のとおりです

編集:コンポーネントはモジュールレベルで宣言されているため、これはあまり問題ではないと考えています。これは、個々のコンポーネント レベルで子コンポーネントを宣言する必要がなくなるため、繰り返しが大幅に減ることを意味します。

于 2015-12-21T10:11:55.137 に答える