1

新しいアプリケーションにAngularJsを使用しています。問題は解決したと思いますが、最善の方法で解決したかどうかわからないので、先に砲撃する前に確認したいと思います。

たとえば、2つのコントローラーAccountsCtrlとContactsCtrlがあり、それぞれが呼び出されるたびに、すべてのアカウントのRESTサーバーへの要求、またはコントローラーごとに連絡先が作成されるとします。コントローラ内では、データの変更は角度モデル(およびサーバーバックエンド)で同期され、これを反映してUIを反映します。ユーザーが各コントローラーを切り替えるたびに、サーバーを呼び出して、前回ロードされたときに既に持っていた(最新の)データをフェッチする必要があります。

現在、これにより非常に小さな遅延が発生します。ラグとサーバー要求を節約するために、コントローラーがロードされるたびにロードされないように、永続的にしたいと思います。データを$rootScopeに保存しようとしましたが、これはうまく機能しますが、それが正しいことかどうかわかりません。

問題は、この問題をどのように解決するのが最善かということです。$ rootScopeはこれに取り組むための最良の方法ですか?

4

2 に答える 2

2

Webサーバーとやり取りするデータとコードを1つまたは2つのAngularサービスに保存します。コントローラが作成されるたびに(たとえば、もう一度ページに戻るとき)、(適切な)サービスは、キャッシュされたデータを返すか、RESTサーバーにAjaxリクエストを行うかを決定する必要があります。

あなたのサービスはあなたのコントローラーに注入されます。

https://stackoverflow.com/a/12009408/215945およびhttps://groups.google.com/d/topic/angular/eegk_lB6kVs/discussionも参照してください

于 2013-01-10T16:01:17.280 に答える
0

まず、サービスを介してREST呼び出しを行う必要があります。

app.factory('RestService', ['$http', function($http) {
   return {
     getSomething: function(url) {
        var result = {};

        $http.jsonp(url).success(function(data) {
           result.list = data;
        });
        return result;
     }
   };
   ...
}];

必要ありません$rootScope。たとえば、両方のコントローラーをスコープする親コントローラーを定義し、RootControllerそこにデータを保存するだけです。これは、子スコープ(AccountsCtrlなど)が親スコープで定義されているものを継承するためです。

<div ng-controller="RootController">
    <div ng-controller="AccountsCtrl">
    </div>
    <div ng-controller="ContactsCtrl">
    </div>
</div>

実際には、これはを使用するのとほとんど同じ$rootScopeですが、それを注入する必要はなく、コントローラーロジックを他のコントローラーと同じように保つことができます。

于 2013-01-10T13:02:33.960 に答える