在Angular Js的控制器中,我想知道是否启用了html5Mode。我怎么能这样做?
在配置阶段,我可以设置$locationProvider.html5Mode(true)
或者我可以使用$locationProvider.html5Mode()
但是,我不能在“运行”块上执行相同操作,如下所示:
var isHtml5enabled = $location.html5mode() // looking for something like this...
有办法做到这一点吗?
为什么我需要它?
我正在尝试修改ui-router。
ui-router
的{{1}}指令和ui-sref
服务/方法生成网址而不考虑是否在Html5Mode中。
如果启用了Html5Mode,那么这样的网址就可以了:$state.href("")
但如果它被禁用,它应该是这样的:/my/base/path/generated/by/uirouter
所以我试图检测Html5Mode的状态。
我在配置阶段做了,但是在我读完信息后,另一个模块可以改变它的状态。 (我猜......)这就是为什么我想确定控制器/运行块上Html5Mode的状态。
答案 0 :(得分:8)
虽然现在已经很晚了,但我发现你可以通过$location.$$html5
检测HTML5模式是否已开启。所以你可以在控制器中执行此操作:
if (!$location.$$html5) {
// your code to execute when HTML5 mode is not enabled
}
答案 1 :(得分:0)
查看the source后,您似乎无法检查默认情况下是否从控制器打开或关闭html5Mode
。但是,您可以编写自己的服务,该服务在.config
和.controller
中用于公开此信息。
我不得不问,为什么你的控制器需要知道这些信息?我猜你可能正在做一些最好的事情。
查看the source后,您似乎无法检查默认情况下是否从控制器打开或关闭html5Mode
。但是,您可以编写自己的服务,该服务在.config
和.controller
中用于公开此信息。
我不得不问,为什么你的控制器需要知道这些信息?我猜你可能正在做一些最好的事情。
<强>更新强>
我想如果你已经在ui-router
进行更改,你可以远距离修改location.js并重新打包Angular(或者只是编辑angular.js并自己重新缩小) ?这不会花费太多,您只需要在第512行之后修改$location
对象,以添加一个公开本地html5Mode
变量的函数。