#javascript #angularjs
#javascript #angularjs
Вопрос:
У меня есть контроллер, который использует $location
сервис в angular, однако нам нужно использовать его только в режиме HTML5, если браузер не поддерживает history.pushstate
, мы хотим исключить сервис из контроллера, чтобы он не переписывал URL /#/2016-17
-адрес и вместо этого не выполнял никакой маршрутизации. Однако, если вы вводите $location
в контроллер, он автоматически маршрутизирует с использованием метода hashbang.
Код ниже для справки:
function SearchAdvancedController($location) {
$location.url("/", false);
}
function config($locationProvider) {
$locationProvider.html5Mode({
enabled: true,
rewriteLinks: false,
requireBase: false
});
}
Есть идеи?
Спасибо, ребята.
Комментарии:
1. Angular в основном создан для SPA. Вы хотите перезагружать свое приложение каждый раз, если браузер не поддерживает
history.pushstate
??2. @SteevePitis Я не хочу, чтобы он что-либо делал, $location не является критической функцией, все, для чего он используется, — это изменение URL при поиске пользователя, что не является ключевой функцией в старых браузерах
Ответ №1:
Вы всегда должны вводить службу в свой контроллер, если только вам не нужно много if..else
условий, которые проверяют, существует ли служба или нет. Самое простое, что нужно сделать, это определить свой собственный сервис для изменения URL-адресов и условно заставить его ничего не делать:
module.service('MyLocation', function ($location) {
this.url = function () {
if (/* browser supports pushstate */) {
$location.url.apply($location, arguments);
}
};
});
function SearchAdvancedController(MyLocation) {
MyLocation.url('/', false);
}
Возможно, вы захотите поиграть с декораторами и для этой цели.
Комментарии:
1. Будет ли это применяться и при загрузке страницы?
2. Что именно означает?
3. $location все еще вводится?
4. Я только что попробовал это, и он все еще перенаправляется со страницы
5. Если ваш контроллер не запрашивает его, он его не получит…