14

これは、AngularJS アプリを作成しているときに熟考してきたものです。AngularJS ファクトリについて初めて知ったとき、それらの賢い使い方の 1 つは、単純なオブジェクトではなくコンストラクタ関数を作成して返すことだと思いました。つまり、次のようなものです。

app.factory("Foo", function() {
  function Foo(bar, baz) {
    this.bar = bar;
    this.baz = baz;
    ...
  }

  Foo.prototype = {
    constructor: Foo,
    method1: function() { ... },
    method2: function() { ... },
    ...,
    methodn: function() { ... },
  };

  return Foo;
});

次に、関数をコントローラーに挿入し、 で呼び出すことができますnew。私はこれが美的に心地よく OOP-y であることを発見しましたが、実際にはアンチパターンであると考え始めています。問題は、AngularJS 対応のコンテキスト内で作業している場合は正常に機能することですが、たとえば、コンソールからコンストラクターを呼び出したり、Web ワーカーで使用したり、非AngularJS アプリでは、 AngularJS を使用するのではなく、AngularJSを回避する必要があります。javascript の関数がすでに「シングルトン」であり、インスタンス化の助けが必要ないように見える限り、このアプローチは間違っているのではないかと思い始めました。

AngularJS ファクトリーを誤用していませんか? グローバルスコープに公開されたコンストラクター関数を使用したほうがよいでしょうか? より一般的には、AngularJS ファクトリ/サービス/プロバイダーのグローバル オブジェクトまたはその逆の使用を促進する特定の要因はありますか?

4

2 に答える 2

6

はい!

工場の構文: module.factory( 'factoryName', function ); 結果: factoryName を注入可能な引数として宣言すると、module.factory に渡された関数参照を呼び出すことによって返される値が提供されます。使用法: インスタンスを作成するために new できる「クラス」関数を返すのに役立ちます。

ソース: https://groups.google.com/forum/#!msg/angular/56sdORWEoqg/HuZsOsMvKv4J

上記のリンクは、Bart のコメントのソースとしても使用されています: AngularJS: Service vs provider vs factory

于 2013-11-21T00:48:14.690 に答える