如何在路由历史记录中获取当前URL的第一个URL?

时间:2017-01-23 13:55:21

标签: javascript angularjs angular-routing

我在我的应用上使用了一个重定向到上一页的按钮。

看起来像这样:

<button ng-click="goBack()">Go back</button>

$scope.goBack = function() {
    $window.history.back();        
}

我希望此按钮转到上一个网址不同的当前网址,而不仅仅是上一页(可能与当前网址相同)。

示例:

  • 如果我转到/home,然后转到/products,然后转到/products,再转到/products
  • 然后我想恢复/home

有没有办法让第一个网址与当前网址不同?

3 个答案:

答案 0 :(得分:1)

出于安全原因,您无法访问本机历史记录网址。但你可以使用角度来保存自己的记录,例如myHistoryService

app.run(function($rootScope, $location, myHistoryService) {
    $rootScope.$on('$routeChangeStart', function(ev, next) {
        var path = $location.path();
        myHistoryService.push(path);
    });
});

myHistoryService中,您可以直接推送到数组,或使用您喜欢的任何逻辑。

这假设您只需要在您自己的域中使用历史记录。

答案 1 :(得分:0)

如果您只想在角度应用程序中这样做,那就不难了。 例如,您必须使用stateChangeSuccess事件监视状态更改,并在状态URL相同时进行计数。如果您想要返回上一个不同的网址,可以使用window.history.go(-X),其中X是您计算的数字。

一个例子(不完美,只是一个概念,为简单起见,所有内容都在$ rootScope上)。

angular.module('YourModule').run(function() {
    var lastUrl, counter;
    $rootScope.$on('$stateChangeSuccess', function(event, toState) {
        if (lastUrl != toState.url) {
            counter = 1;
            lastUrl = toState.url;
        } else {
            counter++;
        }
    });
    $rootScope.goBack = function() {
        $window.history.go(-1 * counter);
    };
});

答案 2 :(得分:-1)

<强> 1

您可以使用window.history.back();使浏览器返回上一页,但无法访问该网址。如果可能的话,您可以在第一次进入您的网站时轻松监视每个用户。

但如果它位于同一个域中,您可以使用document.referrer访问以前的网址。

<强> 2

要访问浏览器历史记录,请History Object

您可以通过window.history访问它,它将返回一系列历史记录项。使用该对象,您可以比较当前位置window.location.href和此先前返回的对象