1

$rootScope で AJAX 呼び出しを介してカレンダー データを取得するアプリケーションを構築しています。このオブジェクトをさまざまなコントローラーで使用しますが、さまざまなオブジェクトがネストされているため、適切に解析できる必要があります。解析するロジックはどこに保存すればよいですか? $rootScope 関数としてルート コントローラーに入れたことはありますが、これはファクトリの使用例のように感じます。ただし、テンプレートからファクトリ メソッドにアクセスできるようには見えません (また、アクセスするのが良いとは思いません)。

現在、次の工場があります。

angular.module('services',[]).
factory('dataManipulation', function(){
    return{
        getPerson: function(peopleObj, userID){
            //Since each user has a unique ID, this returns an array with one element,
            // so to simplify the view code, there's a [0] at the end
            var person= peopleObj.filter(function(element, index, array) {
                if (array[index].cwid == userID) {
                    return true;
                }
            })[0];
            return person;
        }
    };
});

そして、私のコントローラーで以下:

angular.module('app.controllers',[]).
controller('rootCtrl', ['$rootScope', '$http', 'dataManipulation',
    function($rootScope, $http, dataManipulation) {
        $rootScope.getPerson = function(peopleObj, userID){
            return dataManipulation.getPerson(peopleObj, userID);
        }
    }
]);

それは機能しますが、ベストプラクティスに従っているかどうかはわかりません.

では、モデルを解析するためのこれらの関数は rootScope にあるべきでしょうか、それとも別の場所にあるべきでしょうか?

4

1 に答える 1

0

あなたの投稿はやや混乱しています(オブジェクトを解析する必要がありますか?:s)が、サービスまたはプロバイダーまたはファクトリ(同じものの実装バリエーション)を使用して、説明していることを達成します。これにより、 $rootScope の使用を完全に回避し、サービス/ファクトリを使用が必要なコントローラーに挿入できます。

$scope は基本的に、Angular アプリケーションのコンテキストでのモデル (または、モデルのストレージ デバイスです。$scope に対して直接データを保存することに関連する危険があります。つまり、$scope.x = 1) であり、$rootScope はその「グローバル」です。親は主に内部でスコープを管理するために使用され (私が理解しているように、私は間違っている可能性があり、これを確認しようとします)、グローバル スコープでイベントを発行しますが、データを保存するために非常に便利に使用できますが、可能な場合はこれを避ける必要があります. IMO のアイデアは、Angular アプリ内のモデルに必要な唯一の操作が純粋にプレゼンテーションになるように、可能な限り使用可能な状態でモデルを Angular アプリに配信することです。

于 2013-08-08T15:53:45.550 に答える