确定控制器中是否启用了HTML5模式

时间:2013-07-22 16:16:42

标签: angularjs angular-ui

在Angular Js的控制器中,我想知道是否启用了html5Mode。我怎么能这样做?

详细说明:

在配置阶段,我可以设置$locationProvider.html5Mode(true)或者我可以使用$locationProvider.html5Mode()

了解是否启用了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的状态。

2 个答案:

答案 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变量的函数。