149

AngularJS のデコレータとは正確には何なのか知りたいです。AngularJS のドキュメントの宣伝文句とyoutube videoでの簡単な (興味深いものではありますが) 言及を除いて、デコレータに関するオンラインの情報はあまりありません。

Angular の人たちが言うように、デコレータは次のとおりです。

サービスの装飾により、デコレータはサービス インスタンスの作成をインターセプトできます。返されたインスタンスは、元のインスタンス、または元のインスタンスに委任された新しいインスタンスの場合があります。

それが何を意味するのかよくわかりませんし、なぜこのロジックをサービス自体から分離するのかわかりません。たとえば、異なる条件で異なるものを返したい場合は、関連する関数に異なる引数を渡すか、その非公開状態を共有する別の関数を使用します。

私はまだ AngularJS 初心者なので、単に無知や悪い習慣を身につけただけだと思います。

4

5 に答える 5

10

decoratorによって作成されたサービス インスタンスをインターセプトでき、他の方法では構成できないfactory, service, value, providerものを変更するためのオプションを提供します / オプションを使用します。instance(service)

たとえば、テスト目的でモックアップ インスタンスを提供することもできます$http

于 2013-07-21T04:59:08.580 に答える
4

簡単に言えば、拡張メソッドのようなものです。例の場合。クラスがあり、2 つのメソッドがあり、実行時にさらにメソッドを追加したい場合は、Decorator を使用します。

$provide.decorator を定数と一緒に使用することはできません。これは、読み取り専用プロパティをヒービングしている定数を変更できないためです。

于 2015-06-12T15:42:36.550 に答える
1

簡単に言えば、デコレータは次のように説明できます:-

デコレーター関数は、サービスの作成をインターセプトして、サービスの動作をオーバーライドまたは変更できるようにします。

サービスをAngularで使用し、$provide別のサービスの実装を変更または置換します

$provide.decorator('service to decorate',['$delegate', function($delegate) {
  // $delegate - The original service instance, 
  //             which can be replaced, monkey patched, 
  //             configured, decorated or delegated to. 
  //             ie here what is there in the 'service to decorate'

  //   This function will be invoked, 
  //   when the service needs to be provided 
  //   and should return the decorated service instance.
  return $delegate;
}]);

例:

$provide.decorator('$log', ['$delegate', function($delegate) {
  // This will change implementation of log.war to log.error
  $delegate.warn = $delegate.error; 
  return $delegate;
}]);

アプリケーション

@JBlandの回答に加えて。

  • アプリケーション全体のロケール設定:-

    ここで例を見つけることができます

  • angularサービスによるサービスのデフォルトの動作と既存の実装の変更:-

    ここでサンプルを見つけることができます

  • 異なる環境での関数の動作の切り替え。

于 2017-12-19T06:23:52.010 に答える