history.pushState在控制器中不起作用

时间:2015-03-23 18:39:22

标签: angularjs pushstate html5-history

我的html中有两个按钮:

<a href="" class="sbtn sbtn-default" ng-click="GoToNext()"><i class="fa fa-angle-right"></i> Next </a>
<a href="" class="sbtn sbtn-default" ng-click="GoToPrev()"> Prev <i class="fa fa-angle-left"></i></a>

然后在我的控制器中:

$scope.GoToNext = function () {
    var nextPage = getNextPage("next");

    history.pushState(null, "Site Title", nextPage);
    getQuestion();
}

$scope.GoToPrev = function () {
    var prevPage = getNextPage("prev");

    history.pushState(null, "Site Title", prevPage);
    getQuestion();
}

并且getNextPage函数是:

function getNextPage(type) {

    var querystr = window.location.pathname.split('/')[4];
    var currentQuestion = querystr.split("-")[1];
    var currentBook = querystr.split("-")[0];

    switch (type) {
        case "next":
            return ((currentBook + "-") + (+currentQuestion + +1));

        case "prev":
            if (currentQuestion == 1)
                return (currentBook + "-1");

            return ((currentBook + "-") + (+currentQuestion - +1));

    }

};

我的网址看起来像这样:

http://localhost:14799/app/Dashboard/Question/1-330

getQuestion函数只是从服务器获取数据,我已经测试了它并且它没有问题地返回数据,实际上它在页面加载时返回数据没有问题。

我要做的是更改网址,点击这些按钮获取下一个或上一个问题。但是发生的事情是调用getQuestion函数但URL没有改变。如果我非常仔细地查看URL并注意它会变得非常快速地回到上一页,只需一瞬间!

我的代码中没有任何内容可以返回上一页。

我尝试在getNextPage函数中添加console.log以查看它是否调用了两次,但它没有,它只是为每次点击调用一次。

如果我在控制台中尝试pushState,它可以工作!

我还在getQuestion函数的末尾添加了控制台日志,看它是否卡在函数的中间,但没有!控制台日志正在发生,但它返回上一页。

我只是拼命地测试东西,但没有运气。

2 个答案:

答案 0 :(得分:1)

一年之后,我正在努力解决这个问题,现在我明白了。它不是角度如何工作。我应该使用ngRoute模块来提供导航。它不是关于pushstate不工作或其他什么,它关于角度如何工作。

我不需要$scope.GoToNext$scope.GoToPrev进行导航,因为angular会自动为我做这件事。只需改变路线及其完成。一切正常。

答案 1 :(得分:-2)

各种浏览器平台上不一致支持

pushState。请改为History.js