2016-04-12 12 views
0

私はui-routerとAngular 1.4.7を使用しています。文脈については、私が試したことはすべて、前方から(経路から離れた場所を含めて)または経路内を後方にナビゲートするときに機能しますが、の異なるルートに戻るときには機能しません。ブラウザの履歴をナビゲートするときにブラウザが角経路にぶつからないようにする方法

私が立ち往生しようとしているコントローラの中で私は$ location.search()を使って自分のルートパラメータを更新し、$ locationChangeSuccessを使ってその変更後の関数を起動しています。現在、私は別のルートに戻ろうとすると、ルートに固執してしまいます。私は$ locationChangeStartと$ locationChangeSuccessを使ってルートを検出しようとしました(newUrlとoldUrlパラメータをスライスして)私は戻ってみようとしていますが、常に現在のルートとして表示されます(ただし、フォワードをナビゲートする)。

更新:コード

// routeIGetStuckOn.js excerpt 
$stateProvider 
    .state('routeIGetStuckOn', { 
    url: '/routeIGetStuckOn?optionalParams', 
    reloadOnSearch: false, 
    templateUrl: 'app/routes/routeIGetStuckOn/routeIGetStuckOn.html', 
    controller: 'routeIGetStuckOnCtrl', 
    controllerAs: 'vm' 
    }); 

/////////////////////////////////////////////////////////////////////// 
// routeIGetStuckOn.controller.js excerpt 

// When params in URL is updated, fire a function 
$scope.$on('$locationChangeSuccess', function() { 
loadNewData(); 
}); 

//Use $location.search in various different functions with different types of new data 
$location.search('optionalParams', newData); 

アップデートの一部:表示URLの問題

私は他の誰がで終わる場合には、私は答えとして提出する解決策を見つけましたこの状況。バックステップ2のwebsite.com/routeIGetStuckOnにあるボタンをブラウザを使用して戻ったが結局するwebsite.com/routeIGetStuckOn?optionalParams=data

  • 試行をクリックして上のwebsite.com/routeIGetStuckOn
  • アップデートのparamに

    1. website.com/randomRoute
    2. ゴーでスタート:これは私が防止していますものですwebsite.com/routeIGetStuckOn?optionalParams=。この時点で、ステップ1
  • +0

    あなたのルートとURLの例を挙げてもらえますか?コードを使用していますか?あなたが 'stateChangeSuccess'を使用していない理由は何ですか? – tyler

    +0

    '$ stateChangeSuccess'は、履歴を通って別のルート(またはルート上をクリックするだけ)に進むと起動します。私が何をしているのかを明らかにするために、関連するコードを抜き出すことができるかどうかがわかります。しかし、たくさんのコードがあります:/ – bananabanana

    +0

    正しく使用している場合は、 '$ stateChangeSuccess'が戻るボタンを使って起動します。私はいつもそれを使用しています... – tyler

    答えて

    0

    website.com/randomRouteに取得するには、ボタンを押し戻すことができない私が意図したように、代わりにこのコードを追加することにより、website.com/routeIGetStuckOnに行く、ブラウザの履歴を保持し、website.com/routeIGetStuckOn?optionalParams=にナビゲーションを防ぐことができました:

    // Strip unused optional parameter on routeIGetStuckOn home page 
    $scope.$on('$locationChangeStart', function(event, next){ 
        if (next.slice(-1) === '=') { 
        $location.url($location.path()); 
        } 
    }); 
    

    まだ少し気分が悪いですが、私はより良い解決策を見つけることができませんでした。

    関連する問題