Rin*_*rub 5 javascript url internet-explorer-9 location-provider angularjs
我正在使用这些设置在angularjs中创建一个搜索应用程序:
App配置:
app.config(
[
'$locationProvider',
function ($locationProvider) {
$locationProvider.html5Mode({
enabled: true,
requireBase: false,
rewriteLinks: false
});
}
]
);
Run Code Online (Sandbox Code Playgroud)
问题不在于应用程序本身,而是当我试图用IE9访问页面时我根本无法访问它.在做了som阅读之后,我发现IE9忽略了一个url中#之后的所有内容,并将用户重定向回主机url(url中的#之前的所有内容)而html5mode的标准后备是hashbang-mode.$ location的Angular文档
我的问题是,如果有人知道在网址中是否有任何方法可以使用hashbangs,或者是否有其他人有这个问题.如果需要更多文档,请告诉我,我会提供!
编辑:这是在控制器内:
$scope.$on('$locationChangeSuccess', function () {;
$scope.searchQuery = $location.search()['q'];
$scope.search();
});
Run Code Online (Sandbox Code Playgroud)
编辑:添加$locationProvider.hashPrefix('!');将无法正常工作,因为它只会添加"!" 在网址中的"#"之后.
请参阅angular docs中的图片:

IE9不支持history.pushState,参见:http ://caniuse.com/#feat=history
因此,当您启用 html5Mode 时,例如:$locationProvider.html5Mode(true)
对于 IE9,它将回退到 URL 中的 # - 没有办法解决这个问题
话虽如此,您应该仍然能够使用$location.search();
您可以像这样获取搜索参数:
var searchObject = $location.search();
要获取特定参数,您可以执行以下操作:$location.search().paramName
请参阅https://docs.angularjs.org/api/ng/service/$location了解更多信息。
该服务的替代方法$location是注入$routeParams,请参阅: https: //docs.angularjs.org/api/ngRoute/service/ $routeParams 但我不确定您的用例,routeParams 仅在路线更改完成后更新