1. ホーム
  2. javascript

[解決済み] AngularJS : ファクトリーとは?

2022-12-19 12:26:56

質問

私は、これまでずっと Angular.js について多くの作業を行ってきましたが、全体として、これは興味深く、強力なフレームワークであると感じています。

サービス vs. ファクトリー vs. プロバイダ vs. 価値について多くの議論がなされてきたことは知っていますが、私はまだ Factory が何なのか、まだかなり混乱しています。

ファクトリーは、他のStackOverflowの議論では以下のように定義されています。

ファクトリー

シンタックス module.factory( 'factoryName', function ); 結果 factoryName を注入可能な引数として宣言すると、module.factory に渡された関数参照を呼び出すことによって返される値が提供されます。

この説明は非常にわかりにくく、ファクトリーとは何かということの理解を深めることができません。

が一体何なのか、説明や実例をお持ちの方はいらっしゃいますか? Factory の代わりにこれを使うべき理由について、説明や実例があれば教えてください。 Service , Provider なのか、それともその他なのか?

更新情報

A service リファレンスを保持する への参照を保持します。 オブジェクトの .

A factory は関数 を返す関数で、任意の オブジェクトを返します。

A provider は関数 を返す関数で、任意の 関数

- ふぅ -

どのように解決するのですか?

私が理解したところでは、それらはすべてほとんど同じです。大きな違いは、その複雑さです。プロバイダーは実行時に設定可能で、ファクトリーはもう少し堅牢で、サービスは最も単純な形式です。

この質問をチェックアウトする AngularJS:サービス対プロバイダ対ファクトリ

また、この 要旨 は、微妙な違いを理解するのに役立つかもしれません。

出典 https://groups.google.com/forum/#!topic/angular/hVrkvaHGOfc

jsFiddleです。 http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/

の作者です。 パウエル・コズロフスキー

var myApp = angular.module('myApp', []);

//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
    this.sayHello = function() {
        return "Hello, World!";
    };
});

//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
    return {
        sayHello: function() {
            return "Hello, World!";
        }
    };
});

//provider style, full blown, configurable version     
myApp.provider('helloWorld', function() {
    // In the provider function, you cannot inject any
    // service or factory. This can only be done at the
    // "$get" method.

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello, " + name + "!";
            }
        };
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey, we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});


function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {

    $scope.hellos = [
        helloWorld.sayHello(),
        helloWorldFromFactory.sayHello(),
        helloWorldFromService.sayHello()];
}​