仅在页面的一部分使用$ location可以打破按钮

时间:2015-10-24 11:38:05

标签: javascript angularjs angularjs-directive

我想使用$ location来浏览普通静态加载页面上的自包含注释部分,但它似乎打破了后退按钮。

当我使用$ location导航到几个页面,然后点击外部链接时出现问题。它转到了那个链接,但当我回击时,它将URL更改为最后一个,但实际上并没有更改页面(即它保留在外部页面上)。如果我继续单击返回,它会更改URL(因此网址历史记录很好),但它实际上并没有从该网址加载页面,直到我到达我访问过的第一个网页(如果这是有道理的......)。所以,例如:

所以,导航应用程序:

  1. www.example.com - 使用评论

  2. 加载我的页面
  3. www.example.com?page=2 - 使用$ location并正确加载新评论

  4. www.example.com?page=3 - 使用$ location并正确加载新评论

  5. www.externalexamplepage.com - 正确导航到该页面。

  6. 返回 - 将地址更改为www.example.com?page=3但保留在www.externalexamplepage.com

  7. 返回 - 将地址更改为www.example.com?page=2但保留在www.externalexamplepage.com

  8. 返回 - 将地址更改为www.example.com并正确加载页面。

  9. 那么,我怎样才能让它不破坏后退按钮?这就是我在评论指令中得到的:

    $scope.$on('$locationChangeStart', function(e, newUrl) {    
        // If moving off current page...
        if ($scope.changingCommentsPage === false) {
            $window.location.href = newUrl;
        }
    });
    
    $scope.$on('$locationChangeSuccess', function() {
        // Get current urlParams
        var urlParams = $location.search();
    
        // Get new comments if page has changed
        if ($scope.page != urlParams.page || typeof urlParams.page  === "undefined") {
            $scope.changingCommentsPage = false;
            $scope.page = urlParams.page ? urlParams.page : 1;
            if ($scope.page < 1) return;
    
            // Get comments
            getComments($scope.model.page);
        }
    });
    

0 个答案:

没有答案