AngularJS HTML5模式降级为整页重新加载而不是hashbang

Sco*_*ott 22 angularjs

通过在AngularJS中启用HTML5模式,该$location服务将重写URL以从中删除hashbang.这是一个很棒的功能,可以帮助我完成我的应用程序,但是它的回退到hashbang模式有一个问题.我的服务需要身份验证,我被迫使用我的应用程序的外部身份验证机制.如果用户尝试使用其中的hashbang转到我的应用的URL,它将首先将它们重定向到身份验证页面(除非成功通过身份验证,否则不会触摸我的服务),然后将它们重定向回我的应用程序.由于哈希标签只能从客户端看到,所以当它们到达我的服务器时,它将会丢失路由的所有部分.一旦对它们进行了身份验证,它们就可以重新输入URL并且它将起作用,但是它会在一个初始时间内导致用户体验中断.

我的问题是,有没有办法从不$location.html5Mode(true)支持浏览器的全页重新加载的后备,跳过完全在AngularJS中的hashbang方法?

我正在瞄准的可用实现的最佳比较将是诸如在github.com上浏览文件夹之类的东西.如果浏览器支持在不启动页面刷新的情况下重写URL,则页面将异步加载必要的部分.如果浏览器不支持,则当用户单击文件夹时,将发生整页刷新.使用AngularJS代替使用hashbang模式可以实现吗?

ard*_*m-c 1

尝试将 $location 和 $routeProvider 配置包装在浏览器的 HTML5 History API 检查中,如下所示:

if (isBrowserSupportsHistoryAPI()) {
    $location.html5Mode(true)
    $routeProvider.when(...);
}
Run Code Online (Sandbox Code Playgroud)

如果您使用 $location 来更改路径,您也可能需要创建一个包装器。(抱歉英语很糟糕)