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

Umu*_*zer 5 angularjs angular-ui

在Angular Js的控制器中,我想知道是否启用了html5Mode.我怎样才能做到这一点?

细节:

在配置阶段我可以设置$locationProvider.html5Mode(true)或者我可以通过使用来学习启用或不启用html5Mode$locationProvider.html5Mode()

但是,我不能在"运行"块上执行相同的操作,如下所示:

var isHtml5enabled = $location.html5mode() // looking for something like this...
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

更新

为什么我需要它?

我正在尝试修改ui-router.

ui-routerui-sref指令和$state.href("")服务/方法生成url 而不考虑它是否在Html5Mode中.

如果启用了Html5Mode,那么这样的网址就可以了:/my/base/path/generated/by/uirouter 但是如果它被禁用,它应该是这样的:/my/base/path/#/generated/by/uirouter

所以我试图检测Html5Mode的状态.

我在配置阶段做了,但是在我读完信息后,另一个模块可以改变它的状态.(我猜......)这就是为什么我想确定控制器/运行块上Html5Mode的状态.

tjf*_*dfs 8

虽然现在已经很晚了,但我发现你可以检测出是否有HTML5模式$location.$$html5.所以你可以在控制器中执行此操作:

if (!$location.$$html5) {
    // your code to execute when HTML5 mode is not enabled
}
Run Code Online (Sandbox Code Playgroud)


Lan*_*don 0

查看源代码后,您似乎无法检查html5Mode默认情况下控制器是否打开或关闭。但是,您可以编写自己的服务来使用.config.controller公开此信息。

但我不得不问,为什么你的控制器需要知道这些信息?我猜你可能正在做一些最好以另一种方式完成的事情。

查看源代码后,您似乎无法检查html5Mode默认情况下控制器是否打开或关闭。但是,您可以编写自己的服务来使用.config.controller公开此信息。

但我不得不问,为什么你的控制器需要知道这些信息?我猜你可能正在做一些最好以另一种方式完成的事情。

更新

我想如果您已经在进行ui-router更改,您可以继续修改location.js并重新打包 Angular (或者只是编辑 angular.js 并自己重新缩小它)?不需要太多,您只需要$location在第 512 行之后修改对象以添加公开局部变量的函数即可html5Mode