58

私は自分の AngularJS アプリのアイデアを持っています。AngularJS コミュニティがこの方法でそれを行っても問題ないと考えるかどうか知りたいです。つまり、データ API に接続し、結果をページに表示しています。

上にデータ ストアを作成する AngularJS サービスを作成しました$rootScope.DataStore。また、API エンドポイントから返されたデータで DataStore を更新するサービス メソッドもあります。を使用してコントローラー内から「製品」API エンドポイントを要求すると、これは製品データでDataStore.update('products')更新されます。$rootScope.DataStore.products

ビュー/部分ではng-repeat="product in DataStore.products"、データを表示するように指示するだけでよく、どのコントローラ スコープにいるかは問題ではありません。つまり、本質的には、DataStore が唯一の信頼できる情報源です。

この方法から得られると感じているのは、セマンティクスと最小限のコントローラーコーディングに従うのが簡単なことです。したがって、DataStore が更新されるたびに、DataStore にバインドされているものもすべて更新されます。

これはダイジェスト サイクルに過度の負荷をかけるのでしょう$rootScopeか? それとも、これは奇妙な方法なのでしょうか? それとも完全に素晴らしい方法ですか?:) どんなコメントも大歓迎です。

4

5 に答える 5

9

私の経験では、アプリ内のすべての ngView に共通するデータモデルの一部を格納するために $rootScope を使用するのが最も便利な方法です。

<div>{{mymodel.property}}</div>

私にとっては、より読みやすく、より短いです

<div>{{getPropertyModel()}}</div>

ジャバスクリプトで

app.factory('MyModel', function(){
    return {
        getModel: function() { ... },
        setModel: function(m) { ... },
    }
});

app.controller('ctrl', ['$scope', 'MyModel', function($scope, MyModel){
    $scope.getPropertModel = function() {
        return MyModel.getModel().property;
    };
}]);

サービスまたは cachefactory を使用する場合、html テンプレート内のモデルへのすべてのアクセスが関数になり、rootScope のプロパティへのアクセスよりも読みにくくなります。$rootScope を使用するとコードが少なくなり、結果としてエラーとテストが少なくなります。

もちろん、すべての ngView の共通部分のみが $rootScope に保存されます。モデルの残りの部分は、ローカルの $scope に保存されます。

関数の監視も、オブジェクト プロパティの監視よりも遅くなります。したがって、パフォーマンスに関しては、 $rootScope も優れています。

于 2013-11-18T14:57:30.240 に答える
0

私はちょうど同じ問題に直面しており、それをグローバルに利用可能な「場所」に保存することは正しいアプローチであるように思えますが、その $rootScope は理想的な場所ではありません。

私はこれをさらに調査しており、データを $rootScope に保存する代わりに、「サービス」を使用してデータを管理し、懸念事項を分離することを検討できます (特に最後のコード例): http://joelhooks .com/blog/2013/04/24/modeling-data-and-state-in-your-angularjs-application/

次に、そのアプローチを使用して作成する「サービス」で、データをメモリ、cacheFactory、localstorage (ここで言及されているように)、および/または DB (AJAX 経由など) に保存するかどうかは、ニーズに合わせて何でも構いません。あなたのアプリの。また、必要に応じて、データの保存方法を個別に変更できることも意味します。

于 2013-10-11T03:19:12.527 に答える