Czy można usunąć symbol # z adresów URL angular.js?
Nadal chcę mieć możliwość korzystania z przycisku Wstecz przeglądarki itp. Po zmianie widoku i zaktualizowaniu adresu URL za pomocą parametrów, ale nie chcę symbolu #.
Samouczek routeProvider jest zadeklarowany w następujący sposób:
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'});
}]);
Czy mogę to edytować, aby mieć tę samą funkcjonalność bez #?
Odpowiedzi:
Tak, powinieneś skonfigurować
$locationProvider
i ustawićhtml5Mode
natrue
:źródło
html5Mode(true)
. W IE musisz używać#
na trasach.IE lt 10
oznacza Internet Explorera w wersji mniejszej niż 10$locationProvider.html5Mode(true);
wif !(IE lt 10)
?Sprawdź obsługę przeglądarki dla interfejsu API historii HTML5:
źródło
If the HTML5 History API is not supported by a browser, the $location service will fall back to using the hashbang URLs automatically
Aby usunąć znacznik skrótu dla ładnego adresu URL, a także aby Twój kod działał po zminimalizowaniu , musisz ustrukturyzować swój kod, jak na poniższym przykładzie:
źródło
requireBase: false
+1$locationProvider.html5Mode
kodu mój kod$urlRouterProvider.otherwise('/home');
przestał działać.Zapisuję regułę w pliku web.config po
$locationProvider.html5Mode(true)
ustawieniu wapp.js
.Mam nadzieję, że ktoś pomaga.
W moim index.html dodałem to do
<head>
Nie zapomnij zainstalować przepisywania adresu URL dla iis na serwerze.
Również w przypadku korzystania z interfejsu API sieci Web i usług IIS ten adres URL nie zadziała, ponieważ zmieni połączenia w interfejsie API. Dodaj więc trzecie wejście (trzecia linia warunku) i podaj wzór, który wyklucza połączenia z
www.yourdomain.com/api
źródło
Jeśli jesteś w stosie .NET z MVC z AngularJS, musisz to zrobić, aby usunąć „#” z adresu URL:
Skonfiguruj swój podstawowy href na stronie _Layout:
<head> <base href="https://stackoverflow.com/"> </head>
Następnie dodaj następujące elementy w konfiguracji aplikacji kątowej:
$locationProvider.html5Mode(true)
Powyżej usunie „#” z adresu URL, ale odświeżanie strony nie będzie działać, np. Jeśli jesteś w „yoursite.com/about” ponowne odświeżenie strony da ci 404. Jest tak, ponieważ MVC nie wie o routingu kątowym i według wzoru MVC wyszuka stronę MVC dla „about”, która nie istnieje w ścieżce routingu MVC. Obejściem tego problemu jest wysłanie całego żądania strony MVC do pojedynczego widoku MVC. Można to zrobić, dodając trasę, która przechwytuje wszystkie
URL:
źródło
Możesz dostosować tryb html5, ale działa to tylko w przypadku linków zawartych w kotwicach html strony i jak wygląda adres URL w pasku adresu przeglądarki. Próba zażądania podstrony bez hashtagu (z trybem html5 lub bez) z dowolnego miejsca poza stroną spowoduje błąd 404. Na przykład następujące żądanie CURL spowoduje błąd znalezienia strony, niezależnie od trybu html5:
chociaż następujące spowoduje zwrócenie strony głównej / głównej:
Powodem tego jest to, że wszystko po usunięciu hashtagu, zanim żądanie dotrze do serwera. Tak więc żądanie
http://foo.bar/#/portfolio
przychodzi na serwer jako żądaniehttp://foo.bar
. Serwer odpowie 200 odpowiedziami OK (prawdopodobnie) nahttp://foo.bar
a agent / klient przetworzy resztę.Dlatego w przypadkach, gdy chcesz udostępnić adres URL innym osobom, nie masz innej opcji, jak dołączyć hashtag.
źródło
Wykonaj 2 kroki -
1. Najpierw ustaw $ locationProvider.html5Mode (true) w pliku konfiguracyjnym aplikacji.
Na przykład -
angular.module('test', ['ui.router']) .config(function($stateProvider, $urlRouterProvider, $locationProvider) { $locationProvider.html5Mode(true); $urlRouterProvider.otherwise('/'); });
2. Po drugie ustaw <base> na swojej stronie głównej.
Na przykład ->
<base href="https://stackoverflow.com/">
Usługa lokalizacji $ automatycznie powróci do metody części mieszającej dla przeglądarek, które nie obsługują interfejsu API historii HTML5.
źródło
Moje rozwiązanie polega na utworzeniu .htaccess i użyciu #Sorian code .. bez .htaccess Nie udało mi się usunąć #
źródło
Zgodnie z dokumentacją. Możesz użyć:
Na przykład: jeśli klikniesz:
<a href="https://stackoverflow.com/other">Some URL</a>
W przeglądarce HTML5 : angular automatycznie przekieruje do
example.com/other
W przeglądarce innej niż HTML5 : angular automatycznie przekieruje do
example.com/#!/other
źródło
Ta odpowiedź zakłada, że używasz nginx jako odwrotnego proxy i już ustawiłeś $ locationProvider.html5mode na true.
-> Dla ludzi, którzy wciąż mogą zmagać się ze wszystkimi fajnymi rzeczami powyżej.
Z pewnością @maxim gry rozwiązanie działa dobrze, ale dla rozwiązania, w jaki sposób odpowiadać na żądania, które nie chcą, aby hashtag był uwzględniony w pierwszej kolejności, można sprawdzić, czy php wysyła 404, a następnie przepisać adres URL. Poniżej znajduje się kod dla nginx,
W lokalizacji php wykryj błąd 404 php i przekieruj do innej lokalizacji,
Następnie przepisz adres URL w lokalizacji przekierowania i proxy_pass the data, offcourse, umieść adres swojej witryny w miejscu adresu URL mojego bloga. (Żądanie: Pytanie to dopiero po wypróbowaniu)
I zobacz magię.
I to na pewno działa, przynajmniej dla mnie.
źródło
Zacznij od index.html usuń wszystko
#
z,<a href="#/aboutus">About Us</a>
więc musi wyglądać jak<a href="https://stackoverflow.com/aboutus">About Us</a>
.Now w tagu head index.html napisz<base href="https://stackoverflow.com/">
tuż po ostatnim metatagu .Teraz w swoim routingu js wstrzykuje
$locationProvider
i pisze$locatonProvider.html5Mode(true);
coś takiego: -Aby uzyskać więcej informacji, obejrzyj ten film https://www.youtube.com/watch?v=XsRugDQaGOo
źródło
Domyślam się, że jest na to naprawdę spóźniony. Ale dodanie poniższej konfiguracji do importu app.module wykonuje zadanie:
źródło
Krok 1: Wstrzyknij usługę $ locationProvider do konstruktora konfiguracji aplikacji
Krok 2: Dodaj wiersz kodu $ locationProvider.html5Mode (true) do konstruktora konfiguracji aplikacji.
Krok 3: na stronie kontenera (lądowanie, wzorzec lub układ) dodaj znacznik HTML, taki jak
<base href="https://stackoverflow.com/">
wewnątrz znacznika.Krok 4: usuń wszystkie „#” do konfiguracji routingu ze wszystkich tagów zakotwiczenia. Na przykład href = "# home" staje się href = "home"; href = "# about" staje się herf = "about"; href = "# contact „staje się href =„ kontakt ”
źródło
Wystarczy dodać
$locationProvider
Ina następnie dodaj
$locationProvider.hashPrefix('');
poOtóż to.
źródło