Определение того, включен ли режим HTML5 в контроллере

В контроллере в Angular Js я хочу узнать, включен ли html5Mode или нет. Как я могу это сделать?

Подробности:

На этапе настройки я могу установить $locationProvider.html5Mode(true) или узнать, включен html5Mode или нет, используя $locationProvider.html5Mode()

Однако я не могу сделать то же самое в блоке «выполнить», например:

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

Есть ли способ сделать это?

Обновлять

Зачем мне это нужно?

Я пытаюсь изменить ui-router.

Директива ui-sref ui-router и служба/метод $state.href("") создают URL-адрес не принимая во внимание, находится ли он в режиме Html5Mode или нет.

Если Html5Mode включен, такой URL-адрес подойдет: /my/base/path/generated/by/uirouter Но если он отключен, он должен быть таким: /my/base/path/#/generated/by/uirouter

Итак, я пытаюсь определить статус Html5Mode.

Я сделал это на этапе настройки, но другой модуль может изменить его статус после того, как я прочитаю информацию. (Наверное...) Вот почему я хочу определить статус Html5Mode в блоке контроллера/запуска.


person Umut Benzer    schedule 22.07.2013    source источник


Ответы (2)


Хотя уже поздно, но я обнаружил, что вы можете определить, включен ли режим HTML5, с помощью $location.$$html5. Итак, вы можете сделать это в своем контроллере:

if (!$location.$$html5) {
    // your code to execute when HTML5 mode is not enabled
}
person tjfdfs    schedule 13.05.2014

После просмотра исходника кажется, что вы не можете проверить, включен или выключен html5Mode с контроллера по умолчанию. Однако вы можете написать свой собственный сервис, который будет использоваться в .config и .controller и будет предоставлять эту информацию.

Однако я должен спросить, зачем вашему контроллеру такая информация? Я предполагаю, что вы, возможно, делаете что-то, что лучше всего сделать другим способом.

После просмотра исходника кажется, что вы не можете проверить, включен или выключен html5Mode с контроллера по умолчанию. Однако вы можете написать свой собственный сервис, который будет использоваться в .config и .controller и будет предоставлять эту информацию.

Однако я должен спросить, зачем вашему контроллеру такая информация? Я предполагаю, что вы, возможно, делаете что-то, что лучше всего сделать другим способом.

Обновить

Я полагаю, что если вы уже ui-router вносите изменения, вы можете пойти дальше и изменить location.js, а также переупаковать Angular (или просто отредактировать angular.js и повторно минифицировать его самостоятельно)? Это не займет много времени, вам просто нужно изменить объект $location после строки 512, чтобы добавить функцию, которая предоставляет локальную переменную html5Mode.

person Langdon    schedule 22.07.2013
comment
@UmutBenzer Обновил и мой ответ. - person Langdon; 22.07.2013