【发布时间】:2015-05-26 21:29:24
【问题描述】:
我的 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 函数只是从服务器获取数据,我已经测试过了,它返回数据没有问题,实际上它在页面加载时返回数据没有问题。
我要做的是更改 URL 并通过单击这些按钮来获取下一个或上一个问题。但发生的是它调用 getQuestion 函数但 URL 没有改变。如果我非常仔细地查看 URL 并注意它会非常快速地更改并返回上一页,只需一闪!
我的代码中没有任何内容可以返回上一页。
我尝试的是在 getNextPage 函数中添加 console.log 以查看它是否调用了两次,但它没有,每次点击它只会调用一次。
如果我尝试在控制台中 pushState,它会起作用!
我还在 getQuestion 函数的末尾添加了控制台日志,以查看它是否卡在函数中间,但没有!控制台日志正在发生,但它返回到上一页。
我只是拼命地测试,但没有运气。
【问题讨论】:
-
这对我来说很烦人,因为我没有使用 ngRoute,只是将 Angular 用于一些事情,并且想做一些手动
pushState无济于事。我注意到包装在setTimeout中有效,但document.location.search仍然返回旧值。
标签: angularjs pushstate html5-history