36

私はAngular.JSを使い始めています。

同じコントローラーを共有するビューがいくつかあります。各ビューは、コントローラーに保存されているデータを収集するためのステップです。

$routeProvider.when('/', {
  templateUrl: 'partials/text.html',
  controller: 'itemSubmitter'
});

$routeProvider.when('/nextThing', {
  templateUrl: 'partials/nextthing.html',
  controller: 'itemSubmitter'
});

itemSubmitter コントローラー:

$scope.newitem = {
  text: null
}

最初のビューは次のとおりです。

<textarea ng-model="newitem.text" placeholder="Enter some text"></textarea>

<p>Your text is:
{{ newitem.text }}</p>

これは機能し、'Your text is:' パラグラフをライブ更新します。

ただし、次のビューがロード{{ newitem.text }}されると、デフォルト値にリセットされます。コントローラー インスタンスに格納された値をビュー間で永続化するにはどうすればよいですか?

4

1 に答える 1

68

コントローラーは、ルートを変更するときに破棄されます。ビュー間でデータを運ぶためにコントローラーに依存するべきではないため、これは良い動作です。そのデータを処理するサービスを作成することをお勧めします。

コントローラーを正しく使用する方法については、angular ドキュメントを参照してください。 http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

ドキュメントから引用するには:

コントローラーの正しい使い方

一般に、コントローラーはあまり多くのことをしようとすべきではありません。単一のビューに必要なビジネス ロジックのみを含める必要があります。

コントローラーをスリムに保つ最も一般的な方法は、コントローラーに属さない作業をサービスにカプセル化し、依存性注入を介してコントローラーでこれらのサービスを使用することです。これについては、このガイドの依存性注入サービスのセクションで説明しています。

次の目的でコントローラーを使用しないでください。

  • あらゆる種類の DOM 操作 — コントローラーにはビジネス ロジックのみを含める必要があります。DOM 操作 (アプリケーションのプレゼンテーション ロジック) は、テストが難しいことでよく知られています。プレゼンテーション ロジックをコントローラーに配置すると、ビジネス ロジックのテスト容易性に大きく影響します。Angular は、自動 DOM 操作のためのデータバインディングを提供します。独自の手動 DOM 操作を実行する必要がある場合は、プレゼンテーション ロジックをディレクティブにカプセル化します。
  • 入力の書式設定 — 代わりに角度のあるフォーム コントロールを使用してください。
  • 出力フィルタリング — 代わりに角度フィルターを使用してください。
  • コントローラー間で共有されるステートレスまたはステートフル コードを実行するには — 代わりに angular サービスを使用します。
  • 他のコンポーネントのライフサイクルをインスタンス化または管理するため (たとえば、サービス インスタンスを作成するため)。
于 2013-04-25T11:03:33.030 に答える