ルートにパラメーターを追加して、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つの方法を知っています。
- URL を変更する代わりに、get-parameters を使用します。/mypage から /myotherpage に移動する代わりに、/mypage から /mypage?foo=bar に移動します。これを行うときにルートがリロードするのを防ぐ reloadOnSearch という設定があります。
- リロードを受け入れますが、ルート間のデータを保存します。データをサービス ( Angularjs、ルート間でスコープを渡す) に保存でき、ベース コントローラーが実行されるたびにそのデータをインポートできるため、ルート間で状態を維持できます。これはまったくリロードしないほどきれいではなく、ビューにちらつきが発生する可能性があります (試してみる必要があります) が、かなり簡単に実行できます。