7

ルーティングとコントローラーを使用する場合、モデルはコントローラーのリロード間で状態を保存しません。Angular は、すべてのルート ロードでコントローラー インスタンスと新しいスコープを作成します。

たとえば、ng-model="something" を含む入力に何かを入力し、別のルートに移動してから、最初のルートに戻ります。入力したテキストがすべて失われます。

変更するルート間の単純な双方向データ バインディングが必要です。knockoutjs の ko.observable のように、できるだけシンプルにします。または、暗黙のうちに 1 つのコントローラー内で angular のようにします。多分コントローラのシングルトン $scope で?

ルート変更の間にデータを保存するためのサービスを作成し、それをコントローラーに注入するときに方法を見つけました。コントローラーのコンストラクターで、サービスからの値でモデルを作成し、$scope.watch でこのモデルの変更を確認し、変更時にモデルの値をサービスに設定します。

もっと簡単な方法はありますか?

4

2 に答える 2

11

あなたは正しいです-サービスはこれを行うための正しい方法です。次のように使用できます。

app.js

app.factory('paginationService', function() {
    return {
        cur: 1,
        total: 9,
        pageSize: 8
    };
});


app.controller('Page1Ctrl', function($scope, paginationService) {
  $scope.pagination = paginationService;
});

Page1.html

<div ng-controller="Page1Ctrl">
  <h2>Page1</h2>

  <p>curPage: <input type="number" ng-model="pagination.cur" /></p>  
</div>

完全な例を参照してください。

于 2012-12-12T17:25:24.267 に答える
0

$rootScope をコントローラーに挿入し、それを使用してグローバルにアクセス可能な変数を保存することもできますが、変更を監視する同じ問題が引き続き発生します。サービスを現在のスコープに挿入するディレクティブを作成し、スコープ内のウォッチ ハンドラーもバインドすることができます。

于 2012-12-12T16:22:36.717 に答える