2015-07-15 25 views
5

Mam działającą aplikację AngularJS (1.3.8), która jest wdrażana jako aplikacja internetowa w Tomcat w aplikacji kontekstowej aplikacji.

URL wyglądać tak:

https://www.myserver.com/app/#/login 

https://www.myserver.com/app/#/register 

itd. Trasy są zdefiniowane następująco:

$routeProvider.when(
    'login', 
    {templateUrl: 'partials/login.html?' + now, controller: 'LoginController'} 
); 

$routeProvider.when(
    'register', 
    {templateUrl: 'partials/register.html?' + now, controller: 'RegistrationController'} 
); 

$routeProvider.otherwise(
    {redirectTo: 'login'} 
); 

Wszystko działa bez zarzutu. Teraz muszę usunąć hashbang z adresów URL i użyć trybu $ 5 lokalizacji HTML5. Do tej pory nie mogę tego zrobić.

Moim założeniem było to, że wystarczy zadzwonić

$locationProvider.html5Mode({ 
    enabled: true, 
    requireBase: false 
}); 

a teraz URL app zmienić

https://www.myserver.com/app/login 

https://www.myserver.com/app/register 

to nie działa. Kiedy żądać adresu URL

https://www.myserver.com/app 

kątowe przekierowań do

https://www.myserver.com/login 

Ogólnie rzecz biorąc, cały routing i zasobów ładowania jest uszkodzony z tej zmiany. Na przykład nie można rozwiązać adresów URL stron częściowych w definicjach routingu. Działają tylko wtedy, gdy dodaję przedrostek "/ app /".

Próbowałem użyć tagu bazowy, zmieniając wezwanie $ locationProvider do

$locationProvider.html5Mode({ 
    enabled: true 
}); 

i korzystania

<base href="/app"> 

Co ciekawe, to nie ma znaczenia. Mimo to wprowadzenie https://www.myserver.com/app prowadzi do przekierowania AngularJS do https://www.myserver.com/login. Adres URL https://www.myserver.com/app/login jest niedostępny.

ten sposób używam tag Base:

<!doctype html> 
<html lang="en" ng-app="myApp"> 
<head> 
    <link href="css/mycss" rel="stylesheet" type="text/css"> 
    ... 
    <script src="js/my.js"></script> 
    <base href="/app"> 
</head> 
<body class="ng-cloak"> 
    <ng-view></ng-view> 
</body> 
</html> 

ja też encounterd inne problemy. Na przykład, jeśli mogę zmienić lokalizację znacznika bazowej w pliku HTML, takich jak to:

<!doctype html> 
<html lang="en" ng-app="myApp"> 
<head> 
    <base href="/app"> 
    <link href="css/mycss" rel="stylesheet" type="text/css"> 
    ... 
    <script src="js/my.js"></script> 
</head> 
<body class="ng-cloak"> 
    <ng-view></ng-view> 
</body> 
</html> 

nagle JS i pliki CSS nie może być rozwiązany bardziej podczas obciążenia.

Czy ktoś może wyjaśnić, co robię źle?

Odpowiedz

4

wierzę, trzeba mieć spływu / wewnątrz bazy href

<base href="/app/"> 
+0

Gdzie można ustawić znacznik bazy? Czy ten tag podstawowy powinien być ustawiony w metodzie $ locationProvider.html5Mode()? Podaj przykład, jak i gdzie należy to ustawić. – dionysus

+1

tag podstawowy pojawi się w znaczniku 'head' i' $ locationProvider.html5Mode() 'wewnątrz' aplikacji.config' phase –

+0

Pankaj, co jeśli pliki produkcyjne znajdują się pod myserver/MyProject/podczas gdy MyProject będzie folderem głównym, więc w tym scenariuszu musimy ręcznie edytować index.html Base Href po wdrożeniu. Również powyższe rozwiązanie nie działa podczas programowania na lokalnym serwerze. –