8

私の質問の短いバージョンは次のとおりです。ルート変更をトリガーする必要なく、または現在表示されているページですべてのコントローラーを実行する必要なく、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。私のリンクはきれいでなければなりません:)

4

2 に答える 2