104

私は多くの作業を行ってきましたがAngular.js、全体として、興味深く強力なフレームワークであることがわかりました。

サービス対ファクトリ対プロバイダー対値について多くの議論があったことは知っていますが、私はまだ aFactoryが何であるかについてかなり混乱しています。

Factory は、他の StackOverflow ディスカッションで次のように定義されています。

工場

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

この説明は理解するのが非常に難しく、工場とは何かについての理解が深まりません。

Factory正確に aとは何か、なぜ a ServiceProvider、またはその他の代わりにそれを使用する必要があるのか​​ について共有する説明や実際の例はありますか?

アップデート

Aは、任意のオブジェクトへservice の参照を保持します。

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

Aprovider 任意の関数を返す関数です

-ふぅ-

4

4 に答える 4

71

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

この質問AngularJS: Service vs provider vs factoryをチェックしてください

また、この要点は、微妙な違いを理解するのに役立つ場合があります。

ソース: 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()];
}​
于 2013-05-16T20:12:08.350 に答える
18

大きな違いの 1 つは、工場でカスタム コードを実行できることです。ただし、サービスでは、オブジェクトの作成のみが行われます。

myJs.factory('Factory', function() {

    //Write custom code here

    return {
            Hello: function() {
            return "Hello, World!"
        }
    };
});
于 2013-05-16T20:19:16.897 に答える