2016-06-01 20 views
0

ユーザーが私のAngularJSアプリケーションを使用するときにヒストリートレイルを作成する必要があります。これはブレッドクラムだと思うかもしれませんが、厳密にはそうではありません。何も入れ子にする必要はありません。メインナビゲーションを使用せずにサイトの特定のセクションに戻ることができます。私は、ユーザーがクリックしたルートの配列を構築して、そのルートをdivのリンクとしてli要素として表示できると思うだろう。クリックしたリンクの履歴をAngularJSで作成する方法

いずれかの方向を高く評価します。

$scope.historyLinks = []; 
$scope.addHistory = function(){ 
    $scope.historyLinks.push(window.location.href); 
} 

次に、$ scope.historyLinks配列をループし、最近のナビ履歴のng-repeatを作成します。

私は正しい軌道に乗っているの?

+0

ただし、アプリケーションのブートストラップ段階の間に$ rootScope上のイベントを購読することができますng/service/$ http)。 – OzW

+0

ここに偏ったコメント:あなたが 'ui-router'を使っているならば、' ui-router-extras'を使ってこの問題を簡単に解決できます。これは 'previousState'を持っています。私にはかなり便利です。 http://christopherthielen.github.io/ui-router-extras/#/sticky – CozyAzure

+0

残念ながら、アプリはngRouteを使って作成されているので、サポートするためにアプリ全体を移植する必要なくui-routerを使用するという贅沢はありません。 –

答えて

0

ここでは、Angularを使用したソリューションです。

myApp.run(function($rootScope, $route, $location){ 
    //Bind the `$locationChangeSuccess` event on the rootScope, so that we dont need to 
    //bind in induvidual controllers. 

    var history = []; 
    $rootScope.$on('$locationChangeSuccess', function() { 
     history.push($location.$$path); 
    });   

}); 

注:ルートが一致したとコントローラが呼び出される前に$ locationChangeSuccessが発生するので、あなたは、コントローラ内から登録することはできません。登録するまでに、そのイベントは既に解雇されています。私は[ `interceptor`](https://docs.angularjs.org/api/でこれをやってみてくださいお勧めし

関連する問題