Можно ли удалить символ # из URL angular.js?
Я все еще хочу иметь возможность использовать кнопку назад браузера и т. Д., Когда я изменяю представление и обновляю URL с помощью params, но мне не нужен символ #.
Учебник routeProvider объявлен следующим образом:
angular.module('phonecat', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}).
when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
otherwise({redirectTo: '/phones'});
}]);
Могу ли я изменить это, чтобы иметь такую же функциональность без #?
Ответы:
Да, вы должны настроить
$locationProvider
и наборhtml5Mode
дляtrue
:источник
html5Mode(true)
. В IE вы должны использовать#
в маршрутах.IE lt 10
означает Internet Explorer меньше, чем версия 10$locationProvider.html5Mode(true);
вif !(IE lt 10)
?Обязательно проверьте поддержку браузером API истории html5:
источник
If the HTML5 History API is not supported by a browser, the $location service will fall back to using the hashbang URLs automatically
Чтобы удалить хеш-тег для красивого URL-адреса, а также чтобы ваш код работал после минимизации, вам необходимо структурировать свой код, как показано в следующем примере:
источник
requireBase: false
+1$locationProvider.html5Mode
кода мой код$urlRouterProvider.otherwise('/home');
перестал работать.Я выписываю правило в web.config после того,
$locationProvider.html5Mode(true)
как задано вapp.js
.Надеюсь, выручит кого-то.
В моем index.html я добавил это в
<head>
Не забудьте установить переписчик URL для iis на сервере.
Также, если вы используете Web Api и IIS, этот URL-адрес совпадения не будет работать, так как он изменит ваши вызовы API. Поэтому добавьте третий вход (третья строка условия) и укажите шаблон, который исключает вызовы из
www.yourdomain.com/api
источник
Если вы находитесь в стеке .NET с MVC с AngularJS, это то, что вам нужно сделать, чтобы удалить '#' из URL:
Настройте ваш базовый href на странице _Layout:
<head> <base href="https://stackoverflow.com/"> </head>
Затем добавьте следующее в конфигурацию вашего углового приложения:
$locationProvider.html5Mode(true)
Выше удалит «#» из URL, но обновление страницы не будет работать, например, если вы находитесь на странице «yoursite.com/about», обновление даст вам 404. Это потому, что MVC не знает об угловой маршрутизации и по шаблону MVC это будет искать страницу MVC для 'about', которой нет в пути маршрутизации MVC. Обходным путем для этого является отправка всех запросов страниц MVC в одно представление MVC, и вы можете сделать это, добавив маршрут, который перехватывает все
URL:
источник
Вы можете настроить режим html5, но он работает только для ссылок, включенных в привязки html вашей страницы, и того, как URL-адрес выглядит в адресной строке браузера. Попытка запросить подстраницу без хэштега (с или без html5mode) из любой точки за пределами страницы приведет к ошибке 404. Например, следующий запрос CURL приведет к ошибке «страница не найдена» независимо от html5mode:
хотя следующее вернет корневую / домашнюю страницу:
Причина этого заключается в том, что все, что находится после хэштега, удаляется до того, как запрос поступит на сервер. Таким образом, запрос
http://foo.bar/#/portfolio
на сервер поступает как запрос наhttp://foo.bar
. Сервер ответит ответом 200 OK (предположительно),http://foo.bar
а агент / клиент обработает остальное.Поэтому в тех случаях, когда вы хотите поделиться URL-адресом с другими, у вас нет другого выбора, кроме как включить хэштег.
источник
Выполните 2 шага:
1. Сначала установите $ locationProvider.html5Mode (true) в файле конфигурации вашего приложения.
Например, -
angular.module('test', ['ui.router']) .config(function($stateProvider, $urlRouterProvider, $locationProvider) { $locationProvider.html5Mode(true); $urlRouterProvider.otherwise('/'); });
2. Во-вторых, установите <base> внутри вашей главной страницы.
Например, ->
<base href="https://stackoverflow.com/">
Служба $ location автоматически переключится на метод hash-part для браузеров, которые не поддерживают API истории HTML5.
источник
Мое решение - создать .htaccess и использовать #Sorian код .. без .htaccess мне не удалось удалить #
источник
Согласно документации. Ты можешь использовать:
Например: если вы нажмете:
<a href="https://stackoverflow.com/other">Some URL</a>
В браузере HTML5 : angular автоматически перенаправит на
example.com/other
В не HTML5-браузере : angular автоматически перенаправит на
example.com/#!/other
источник
В этом ответе предполагается, что вы используете nginx в качестве обратного прокси-сервера и уже установили для $ locationProvider.html5mode значение true.
-> Для людей, которые все еще могут бороться со всеми классными вещами выше.
Конечно, @maxim grach solution работает отлично, но для решения того, как реагировать на запросы, которые не хотят, чтобы хэштег был включен в первую очередь, можно проверить, отправляет ли php 404, а затем переписать URL. Ниже приведен код для nginx,
В местоположении php, обнаружите ошибку 404 php и перенаправьте в другое место,
Затем перепишите URL в месте перенаправления и proxy_pass данные, конечно же, поместите URL вашего сайта вместо URL моего блога. (Запрос: вопрос только после того, как вы попробовали)
И увидеть магию.
И это определенно работает, по крайней мере для меня.
источник
Начать с index.html удалить все
#
из<a href="#/aboutus">About Us</a>
так оно должно выглядеть<a href="https://stackoverflow.com/aboutus">About Us</a>
.Теперь в голове тега index.html записи<base href="https://stackoverflow.com/">
только после последнего мета - тег .Теперь в вашей маршрутизации JS внедрить
$locationProvider
и написать$locatonProvider.html5Mode(true);
что-то вроде этого: -Для получения дополнительной информации смотрите это видео https://www.youtube.com/watch?v=XsRugDQaGOo.
источник
Думаю, это действительно поздно для этого. Но добавление приведенного ниже конфига в импорт app.module делает работу:
источник
Шаг 1. Вставьте службу $ locationProvider в конструктор конфигурации приложения.
Шаг 2. Добавьте строку кода $ locationProvider.html5Mode (true) в конструктор конфигурации приложения.
Шаг 3: на странице контейнера (лендинг, мастер или макет) добавьте HTML-тег, например,
<base href="https://stackoverflow.com/">
внутри тега.Шаг 4: удалите все «#» для маршрутизации конфигурации из всех тегов привязки. Например, href = "# home" становится href = "home"; href = "# about" становится herf = "about"; href = "# contact "становится href =" контакт "
источник
Просто добавьте
$locationProvider
ва затем добавить
$locationProvider.hashPrefix('');
послеВот и все.
источник