0

アプリのナビゲーションに角度ルートを使用し、ルート変更時にテンプレートをレンダリングするために ng-viewを使用しています。

しかし、特定のケースでは、別のコントローラーを呼び出して、別のng-includeでテンプレートをレンダリングしたいと考えています (複数の ng-view を使用せず、ui-route を使用したくないため)。

これを行っている間、既存のビューを変更したくありませんが、ルートを変更する必要があります。


更新:実際に必要なものの例- xyzテンプレートとコントローラーctrl
を使用 してルートabcにいるとします。 次に、いくつかの検索を行い、いくつかのデータを入力します。 リンクをクリックした後 (テンプレートxyz内) 、テンプレートxyz1 (オーバーレイのように)を使用してルートをabc1に変更する必要がありますが、以前のビュー (つまり、 xyzテンプレートと入力されたデータ) をすべて再作成する必要があります。

ありがとう

4

2 に答える 2

0

ルートにパラメーターを追加して、routeparams としてアクセスできます。複数のビューに同じテンプレートを使用することもできます。

これを組み合わせて、必要なことを行うことができます(私があなたを正しく理解していると仮定します)。両方のルートを同じページに向け、追加のコンテンツを表示するために使用できる追加の変数を 2 番目のルートに与えます (ng-include を介して)。ルートで設定した変数は、ng-include ステートメントで使用できるテンプレート URL である可能性があります。

例:

  .when('/mypage', {
    templateUrl: 'mypage.html'
  })
  .when('/myotherpage', {
    templateUrl: 'mypage.html',
    to_be_inclyded: 'myotherpage.html'
  })

編集:ページに複数のコントローラーを配置することもできます(コントローラーをルートに直接設定した場合でも)。したがって、このように含まれるコンテンツ用に別のコントローラーを用意できます。

<div ng-controller="MyController">
  <!-- Page content of the original view goes here. -->
  <!-- Note that you could have specified this controller in the route instead. -->
  ...
  ...
  ...

  <!-- Here we put the include, and we can simply give it a new controller -->
  <div ng-include="{{to_be_included}}" ng-controller="MyOtherController"></div>
</div>

実際、ほとんど常にこれを行う必要があります。いくつかのセクションを含むページ全体を 1 つのコントローラーに詰め込もうとする理由はありません。代わりに、各セクション/機能に独自のコントローラーを与えます。これにより、コードがはるかに単純になり、従うのがはるかに簡単になります。


もう一度編集:完全を期すために上記を残しますが、あなたが含めた例では、問題がより明確にわかると思います。大きな問題は、同じビューをロードする必要があることではなく、ルートが変更されるとコントローラーがリロードされ、行ったすべての変更が失われることです。そのため、ユーザーがビューで行った検索やその他のアクションはすべてクリアされます。

デフォルトの $route は、URL を変更するときに常に (そして設計により) コントローラーをリロードします。あなたがやりたいことをするために、UI-router プロジェクト ( https://github.com/angular-ui/ui-router ) をチェックアウトします。これは、デフォルトの $route を使用する代替手段であり、正確な動作をより詳細に制御できます。私はそれを試していないので、この正確なユースケースがサポートされているかどうかはわかりませんが、有望に見えます.

それをしたくない場合、または機能しない場合 (私は試していません)、問題を回避できる可能性があります。他に2つの方法を知っています。

  1. URL を変更する代わりに、get-parameters を使用します。/mypage から /myotherpage に移動する代わりに、/mypage から /mypage?foo=bar に移動します。これを行うときにルートがリロードするのを防ぐ reloadOnSearch という設定があります。
  2. リロードを受け入れますが、ルート間のデータを保存します。データをサービス ( Angularjs、ルート間でスコープを渡す) に保存でき、ベース コントローラーが実行されるたびにそのデータをインポートできるため、ルート間で状態を維持できます。これはまったくリロードしないほどきれいではなく、ビューにちらつきが発生する可能性があります (試してみる必要があります) が、かなり簡単に実行できます。
于 2013-10-22T14:58:49.000 に答える