我的网站(尚未上线)采用了angularjs路由。当一个页面着陆时,基于快速条件检查,它会将我们引导到第二个页面。路由发生得非常快,浏览器不会存储第一个页面的历史记录。我们还启用了后退按钮功能,由于没有存储历史记录,因此该功能不起作用。此外,第一页上有几个外部链接,加载需要几秒钟的时间。因此,当加载这些外部链接时,会出现第一个页面,并检查条件并将其路由到第二个页面。对于强迫浏览器记录第一页的历史记录,有什么想法或解决方案吗?
对此的其他想法是:有没有什么解决方案可以让第一个页面等待所有外部链接完全加载,然后进行路由?
我在谷歌上搜索过,但还没有找到解决方案。任何形式的帮助都将不胜感激。
导航历史您应该实现一个StateHistory
服务,该服务应该有将状态添加到私有数组的方法,以及getPreviusState()
等方法
然后你可以在$stateChangeSuccess
事件上添加每个状态(使用angular ui路由器)
angular.module('myApp', ['ui.router'])
.run(function($rootScope, navigationHistory){
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams) {
navigationHistory.addVisitedState(toState,toParams);
};
});
加载资源时导航使用$http
获取资源(html或其他),作为callback
使用$state.go
向前导航。
angular.module('myApp')
.controller('AppCtrl', function($state,){
$http.get('/someUrl'). // $http.get('page.html') / etc
success(function(data, status, headers, config) {
// save data or add it on the view/template
$state.go('secondState');
//Or
//$state.go(navigationHistory.getLastState().name);
}).
error(errBack);
}
$http文档
Angular的$location.replacement()终于施展了魔法。
以前我使用$location.url('/somepath'),它只是重定向到浏览器的主页,而不是保存第一页的历史记录。