5

ほとんどの場合、ルートの変更後もスコープを維持したいと考えています。そのため、すべてをサービスに転送する以外の目的でコントローラーを使用することをほとんどやめました。私のコントローラーはすべて、次のようになります。

app.factory('CtrlAService', function() {
    return {
        scope: {},
    };
});

function CtrlA($scope, CtrlAService) {
    $scope.data = CtrlAService.scope;

}

つまり、私のコントローラーが行うことは、変数をサービス変数にバインドすることだけであり、関数を 1 つまたは 2 つバインドする以外は、コントローラーを何にも使用しません。

このアプローチは正しいですか?そうでない場合、これを達成するためのより良い方法は何ですか?

ここでサンプル アプリケーションを作成しました: http://jsfiddle.net/Wc22k/1/

4

1 に答える 1

2

データ量の多いアプリケーションを使用している場合、これは一般的にある程度当てはまると思います。ビューの機能が必要になればなるほど、コントローラーの数が増えます。たとえば、アプリケーション内で google-maps と ng-grid をかなり広範囲に使用しているため、すべてのコントローラーにコントローラー内のすべての構成 (ラベル表示などの機能がある場合もあります) が含まれています。また、私が見つけて変更している google-maps コード (MIT Licensed) には、google maps コードとディレクティブ用のコントローラーをラップするかなり複雑な JavaScript オブジェクトがあります。

したがって、短いバージョンでは、はい、データの重いアプリケーションでは、ほとんどのコードがサービスになり、コントローラーはビューをサービスからのデータに接続するだけです。スコープの永続化についてあなたが言っていることはわかりますが、ビューに必要なすべてのロジックをコントローラーに残すのが最善だと思います(これは、サービスのデータモデルではなくビューモデルと見なされます)。何がどこで起こっているのか、何が何に影響を与えているのかを明確に区別するだけです。たとえば、いくつかのビュー間でデータを永続化する必要がある場合、それをサービスに保存します (意味的にも機能的にも適切であるため、代わりに「値」を使用することを検討していますが、これを再実行する時間がありませんでした。要素)。

于 2013-08-26T00:35:25.177 に答える