私の質問の短いバージョンは次のとおりです。ルート変更をトリガーする必要なく、または現在表示されているページですべてのコントローラーを実行する必要なく、URL を変更するにはどうすればよいですか?
詳細:
<ng-view>
3 つのコントローラーによって管理される領域を持つの内部に表示されるテンプレートがあります。ページの一番上にインタラクティブ マップがあります。領域をクリックすると、クリックがブロードキャストされ、他のコンポーネントがそれを取得して、この領域に関するデータを表示します。本当に簡単なセットアップ。
私がやりたいことは、ユーザーがコンテンツにディープ リンクできるようにすることです。そのため、誰かがリンクをクリックするたびに、別のブラウザーにコピーして貼り付けることができる URL を変更したいと考えています。他のユーザーがリンクをクリックするだけで、最初のユーザーが見たのと同じ状態を見ることができます。
現在、次のようなコードで場所を変更しています。
$scope.$on('mapRegionClick', function($scope, regionCode) {
var url = generateURL(regionCode);
$scope.currentScope.$apply(function(){
$location.path(url);
});});
その後、ルーティングで URL が取得され、マップとデータが正しく表示されます。これの欠点は、マップをクリックして URL を変更するたびに、テンプレート/ビュー全体が再生成されることです。マップの生成はちょっと重いので、データ表示コントローラーへの変更のみをトリガーしたいと思います。
出来ますか?どのように?
コントローラー間で何らかの通信を行って目標を達成することはできましたが、ディープリンクを行うことはできませんでした。
PS: と は使いたくありませ$location.search()
んreloadOnSearch=false
。私のリンクはきれいでなければなりません:)