19

AngularJS でコントローラーとサービスを作成するさまざまな例を見続けていますが、混乱しています。2 つのアプローチの違いを誰かに説明してもらえますか?

app.service('reverseService', function() {
    this.reverse = function(name) {
        return name.split("").reverse().join("");
    };
});

app.factory('reverseService', function() {
    return {
        reverse : function(name) {
            return name.split("").reverse().join("");
        }
    }
});

また、コントローラーの例:

function ExampleCtrl($scope) {
    $scope.data = "some data";
}

app.controller("ExampleCtrl", function($scope) {
    $scope.data = "some data";
}
4

2 に答える 2

20

最初のものはグローバル名前空間を汚染しますが、これは長期的には望ましくありません。

function ExampleCtrl($scope){
    $scope.data = "some data";
}

2 つ目は、Controller のスコープをそのモジュール インスタンスに設定します。また、注射可能になります。これは縮小に耐えられるため、(以下のように) 配列表記を使用することをお勧めします。

app.controller("ExampleCtrl", ['$scope', function($scope){
    $scope.data = "some data";
}]);

(Angular) Service と Factory の違いは非常に小さいようです。サービスは、 $injector.instantiateを使用してサービスを初期化するファクトリをラップします。

于 2013-01-06T17:24:04.667 に答える
0

コントローラーとディレクティブを作成する私の好みの方法は次のとおりです。

/**
* SomeCoolModule.controller.js
*/

(function(){
'use strict';

    angular.module('app.modals.SomeCoolModule').controller('SomeCoolModuleController', SomeCoolModuleController);

    AddFlowCurveModalController.$inject =
        [
            '$scope',
            '$filter',
            '$log',
        ];

    function SomeCoolModuleController($scope, $filter, $log) {
        /* controller body goes here */
    }
})();

PS: IIFE により、上記でグローバルな名前空間の汚染は発生していません。

于 2015-01-12T13:33:16.983 に答える