2013-07-21 21 views
48

Czy można dodać adres bazowy do wszystkich tras w aplikacji AngularJS? Zasadniczo zmieniając swoją lokalizację na serwerze (rodzaj, jeśli to ma sens ... aby dostęp do niego był możliwy nie poprzez "/", ale przez "/ coś /").ngRoute ustaw adres bazowy dla wszystkich tras

Aby dodać trochę kontekstu, próbuję umieścić istniejącą aplikację Angular za niektórymi uwierzytelnieniami, dzięki czemu po udanym logowaniu aplikacja będzie dostępna pod adresem: powiedz: http://mysite/secure.

Problem polega na tym, czy jestem załadować aplikację na http://mysite/secure działa dobrze (serwer będzie oczywiście służyć właściwą stronę), ale klikając dowolny link spowodowałoby odświeżyć stronę i droga do http://mysite/#newpage zamiast http://mysite/secure/#newpage.

Bez dodawania/zabezpieczania/do wszystkich tras i elementu łącza jest to możliwe? Pozdrawiam, przepraszam, jeśli to nie jest dobrze sformułowane.

+0

możliwe duplikat [? Jak ustawić lokalizację głównego dla routera angularjs] (http://stackoverflow.com/questions/17319715/how-to-set-root-location- for-angularjs-router) –

Odpowiedz

37

Ustawienie znacznika HTML5 <base> może pomóc. Z dokumentacji here:

linki względne

Należy sprawdzić wszystkie względne linki, zdjęcia, skrypty itd. Należy też określić bazę URL w głowie głównego pliku html (<base href="/my-base">) lub musisz używać bezwzględnych adresów URL (zaczynając od /) wszędzie, ponieważ adresy URL będą rozwiązywane na bezwzględnych adresach URL przy użyciu początkowego bezwzględnego adresu URL dokumentu, który często różni się od głównego katalogu aplikacji.

Uruchamianie aplikacji kątowych z włączonym interfejsem API historii z katalogu głównego jest mocno zalecane, ponieważ zajmuje się względnymi problemami z łączami.

+1

Próbowałem ustawić znacznik , ale nie mogłem go uruchomić, przykład w dokumentach wydaje się nawet go nie używać. Czy w oparciu o powyższy akapit drugi mogę stwierdzić, że jeśli nie do pracy wymagającej aktualizacji wszystkich linków w moim przypadku, dodanie tej dodatkowej wartości trasy byłoby lepsze niż próba ustawienia "globalnego" adresu bazowego? – adamK

+0

Aby zaktualizować wszystkie łącza, przydatne może być podanie stałej globalnej z kątową i dostępną na wszystkich stronach. http://stackoverflow.com/a/17505414/574147 –

+0

Mam , który działa dobrze dla prawie wszystkiego. Jednak dodałem dodatkowe odniesienie, więc robię import w następujący sposób: import {FileUploadModule} z 'primeng/fileupload'; Wszystko wydaje się działać w Visual Studio, ale na prowadzeniu go uzyskać: GET http: // localhost: 59911/src/primeng/FileUpload 404 (Not Found) Czy to z powodu zmiennej bazowej? Czy istnieje sposób, aby uzyskać import, aby zignorować tag podstawowy i po prostu spójrz w module node_modules tak jak powinien? – Mike

36

Miejsce dla podstawy href musi mieć końcowy znak /. Na przykład:

<base href="location" /> 

nie będzie działać. Musi być w tym formacie:

<base href="location/" /> 
+16

'' Oba te ukośniki są potrzebne. –

+1

@VictorPiousbox W mojej aplikacji $ cookieStore przestał działać (jak podczas usuwania po odświeżeniu strony) podczas używania "/ location /" jako baseUrl. Używanie "location /" zadziałało. Nie mam pojęcia dlaczego. –

+2

@yngvar, utrzymuję moje aplikacje kątowe za proxy Apache2, które robi kilka przepisywanych adresów URL, być może to jest powód. –

Powiązane problemy