如何防止浏览器在浏览浏览器历史记录时卡在Angular路线上
How to prevent browser getting stuck on Angular route when navigating back through browser history
我使用的是ui路由器和Angular 1.4.7。就上下文而言,当我在路线内向前(包括远离路线)或向后导航时,我所尝试的一切都有效,但当导航回不同的路线时,我从未尝试过。
在我被卡住的路线的控制器中,我使用$location.search()更新我的路线参数,并使用$locationChangeSuccess在更改后启动一个函数。目前,如果我试图回到另一条路线,我最终会被困在路线上。我曾尝试使用$locationChangeStart和$locationChangeSuccess来检测我试图导航回的路由(通过切片newUrl和oldUrl参数),但它总是显示为当前路由(尽管如果我向前导航,这确实有效)。
更新:部分代码
// routeIGetStuckOn.js excerpt
$stateProvider
.state('routeIGetStuckOn', {
url: '/routeIGetStuckOn?optionalParams',
reloadOnSearch: false,
templateUrl: 'app/routes/routeIGetStuckOn/routeIGetStuckOn.html',
controller: 'routeIGetStuckOnCtrl',
controllerAs: 'vm'
});
///////////////////////////////////////////////////////////////////////
// routeIGetStuckOn.controller.js excerpt
// When params in URL is updated, fire a function
$scope.$on('$locationChangeSuccess', function() {
loadNewData();
});
//Use $location.search in various different functions with different types of new data
$location.search('optionalParams', newData);
更新:显示URL问题
我找到了一个解决方案,我将提交作为答案,以防其他人出现这种情况。这就是我正在阻止的:
- 从
website.com/randomRoute
开始 - 转到
website.com/routeIGetStuckOn
- 点击
website.com/routeIGetStuckOn?optionalParams=data
时更新参数 - 尝试使用浏览器返回按钮返回到步骤2的
website.com/routeIGetStuckOn
,但最终返回到website.com/routeIGetStuckOn?optionalParams=
。此时,无法按下后退按钮进入步骤1的website.com/randomRoute
通过添加以下代码,我可以保留浏览器历史记录并阻止导航到website.com/routeIGetStuckOn?optionalParams=
,而不是按预期转到website.com/routeIGetStuckOn
:
// Strip unused optional parameter on routeIGetStuckOn home page
$scope.$on('$locationChangeStart', function(event, next){
if (next.slice(-1) === '=') {
$location.url($location.path());
}
});
它仍然感觉有点刺耳,但我一直没能找到更好的解决方案。
相关文章:
- 微软边缘浏览器缓存中的RESTful Angular应用程序
- Angular JS-如何强制浏览器记录历史以便快速路由
- Angular Marked和Inappbrowser打开系统浏览器中的所有链接
- angular应用程序中的浏览器功能检测:使用服务、指令、控制器
- Angular Hot毛巾 'blocks.exception' 和 'blocks.router' 不会在浏览器中显示
- Angular:如何在外部浏览器中打开Angular变量-appgyver混合应用程序
- 如何防止浏览器在浏览浏览器历史记录时卡在Angular路线上
- Angular js在浏览器页面刷新后未路由到默认页面
- Angular http在Phone gap中返回错误,但在浏览器中成功
- 如何在注销后从服务器重新加载angular应用程序,而不使用浏览器缓存
- Angular 不加载某些浏览器的图像和内容
- 如何在 Angular 控制器中使用浏览器化的 npm 包
- 当用户单击浏览器后退按钮时,无法在 Angular js 中获取以前的状态数据
- Angular HTTP GET请求在浏览器中工作时返回未定义
- 使用浏览器返回时,Angular $location不会更新
- Angular$templateCache与HTML5浏览器缓存
- 无法阻止angular应用程序中的浏览器页面刷新/重新加载
- Angular ui路由器:按下浏览器中的后退按钮,停止控制器重新加载
- 在使用angular的互联网浏览器之前捕获组合ctrl+n
- 如何在Angular中处理浏览器选项卡关闭事件?只关闭,不刷新