6

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

细节:

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

但是,我不能在“运行”块上做同样的事情,如下所示:

var isHtml5enabled = $location.html5mode() // looking for something like this...

有没有办法做到这一点?

更新

为什么我需要它?

我正在尝试修改ui-router

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

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

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

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

4

2 回答 2

8

虽然来晚了,但是我发现你可以通过$location.$$html5. 因此,您可以在控制器中执行此操作:

if (!$location.$$html5) {
    // your code to execute when HTML5 mode is not enabled
}
于 2014-05-13T07:09:19.130 回答
0

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

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

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

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

更新

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

于 2013-07-22T17:12:36.210 回答