在我的AngularJS应用程序中,我只需保存浏览器历史记录中的状态更改。这就是为什么当我更改$ location的参数时,我使用了replace()方法。
例如,当我访问/ page1时,它将保存在历史记录中。 '中心'参数是使用replace()自动添加的,因此它不会添加新的历史记录条目:
$location.search('centre', hash).replace();
每次我移动地图时,中心都会出现问题。变化。
当我转到/ page2时,会创建历史记录中的新条目。当我移动地图时,' center'变化。
问题是,当我按下BACK按钮时,我会转到/ page1,但我需要保持'居中'与之前相同,但它会更改为与/ page1的历史记录条目一起保存的内容。
我该如何解决这个问题?
我试图添加:
$window.history.replaceState({}, '', $location.absUrl());
我替换()后,但没有工作。
答案 0 :(得分:2)
我找到了调用搜索&在0ms超时内替换确保它在主状态更改的单独摘要周期中发生,并防止先前的状态被替换。
类似的东西:
$timeout(function() {
$location.search('centre', hash).replace();
}, 0);
答案 1 :(得分:0)
这就是我解决这个问题的方法。
首先,我们需要将搜索结果保存为先前和当前:
$rootScope.$on('$locationChangeStart', function (event, toURL, fromURL) {
if ($rootScope.search.current) {
$rootScope.search.previous = $rootScope.search.current;
}
$rootScope.search.current = $location.search();
});
然后我们需要始终改变我们现在所处的实际位置。
$rootScope.$on('$locationChangeSuccess', function (event, toURL, fromURL) {
$rootScope.actualLocation = $location.path();
});
如果按下前进按钮,则必须在URL中更改中心(使用以前的搜索结果)而不按下新的历史记录条目。
$rootScope.$watch(function () { return $location.path() }, function (newLocation, oldLocation) {
if ($rootScope.actualLocation === newLocation) {
$location.search('center', $rootScope.search.previous.center).replace();
}
});
答案 2 :(得分:-2)
我遇到了同样的问题,只能通过使用原生历史API来实现它,如下所示:
window.history.replaceState(hash, null, $location.absUrl());