問題

私は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
    }
}
 

しかし、そのディレクティブをグローバルに使用するようにアプリケーションに指示するにはどうすればよいですか?私はそれらにリンクを持つ大量のビューを持っています。それをインポートして、それらのすべてのコンポーネント(A LOT)のdirectives配列で指定する必要がありますか?

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

  ベストアンサー

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

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

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

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

プロセスについてもっと話す記事を次に示します。 http://blog.thoughtram.io/angular2/2015/11/23/multi-providers-in-angular-2.html

編集: コンポーネントはモジュールレベルで宣言されているので、私はこれほど懸念がありません。これは、個々のコンポーネントレベルで子コンポーネントを宣言する必要がなくなったため、繰り返しが少なくなります。

  同じタグがついた質問を見る

angularjsangularangular2-directives