AngularJSは、さまざまなMV *フレームワークから来ています。 私はフレームワークが好きですが、私はコントローラ間でデータを渡すことに問題があります。コントローラ間でデータを渡す
いくつかの入力(input.html)とコントローラを持つ画面があるとしましょう(たとえば、InputCtrl)。
コントローラApproveCtrlを使用して承認(approve.html)すると、別の画面に移動するボタンが表示されます。
このApproveCtrlには、InputCtrlのデータが必要です。これは大きなアプリケーションでは非常に一般的なシナリオのようです。私の以前のMV *フレームワークで
、これは(擬似コード)のように扱われます:
var self = this;
onClick = function() {
var approveCtrl = DI.resolve(ApproveCtrl);
approveCtrl.property1 = self.property1;
approveCtrl.property1 = self.property2;
self.router.show(approveCtrl);
}
- それは最初Controller-のように動作します。 コントローラーを最初に作成して、コントローラーを正しい状態にすることができます。その後、ビューが作成されます。
さて、AngularJSで、私はこのようなハンドリングだ:
var self = this;
onClick = function(){
self.$locationService.path('approve');
}
- これは、ビュー、最初のように動作します。 ナビゲーションするビュー/ルートを指定すると、コントローラはフレームワークによって作成されます。
作成されたコントローラの状態を制御し、それにデータを渡すことは困難です。 は、私が見て、次のアプローチを試みたが、すべてが、それは私の意見で自分の問題だ持っていました。このサービス
- このルックスで共有することが
- がApproveCtrl InputCtrl &に共有サービスを注入し、すべてのデータを置くを汚い仕事のように。共有サービスの状態はグローバルな状態になりますが、私はApproveCtrlにデータを渡すだけです。
- この共有サービスの有効期間は、私が必要とする以上に長くなります - 承認データにデータを渡すだけです
- パスに多くのパラメータを持つとき、これはかなり厄介取得
- コンこれは私がイベントを使用するものではありません - 私はApproveCtrlにデータを渡す必要があります。何もイベントはありません
- これはかなり面倒です。私はそれにそれを放送することを、最初の親にイベントを送信する必要が子供
が、私はここで何かをしないのですの?あまりにも多くの小さなコントローラを作成していますか? 私は他のフレームワークの習慣をここであまりにも重視しようとしていますか?
私はあなたの必要に応じて第三に行くでしょう。サービスは、主に状態ではなく、データを共有する必要があるコントローラ間でデータをやりとりするために使用されます。 解決策2はかなり複雑ですが、ルートパラメータは成長するにつれて面倒な問題になります。 –
第3のオプションは正しい方法です。 –
あなたはXLIIの回答を受け入れるつもりです、リンクは金鉱山であり、ダイアグラムでした。 –