2013-03-06 32 views
13

Benim $routeProvider böyle yapılandırılmış bir 404 hatası alıyorum: Ben bir bağlantı gibi tıklarsanız, uygulama içinden

teachApp.config(['$routeProvider', '$locationProvider', function($routeProvider,  $locationProvider) { 
    $routeProvider. 
     when('/teach/', {templateUrl: 'views/login_view.html'}). 
     when('/teach/overview', {templateUrl: 'views/overview_view.html'}). 
     when('/teach/users', {templateUrl: 'views/users_view.html'}). 
     otherwise({redirectTo: '/teach/'}); 
    $locationProvider.html5Mode(true); 
}]); 

<a href="/teach/overview">Overview</a>, genel bakış kısmi göstergeleri beklendiği gibi. Ancak, adres çubuğundaki URL'yi tam olarak aynı URL'ye manuel olarak değiştirdiğimde, 404 hatası alıyorum. $routeProvider yanlış yapılandırılmış mı? Ben olmak app http://localhost/teach/

cevap

13

kök url ile MAMP localhost'u kullanıyorum

kurulumu için redirect all paths to root için apache gerekir.

http://localhost/teach/overview'u doğrudan açtığınızda, web sunucunuz tanımlanmamış bir rotadan bir sayfa sunmaya çalışıyor.

Köşeli bir uygulamada, http://localhost/teach/overview href yolu ile bir bağlantıya tıklandığında, Açısal adımlar girilir ve tarayıcınızdan sunucudan bir sayfa talep etmesine izin vermek yerine tıklama etkinliğinizi engeller ve rotaProvider'a gider. gösterilecek istemci tarafı görünümü (bu yüzden buna "tek sayfalık uygulamalar" diyorlar). Bu yüzden bağlantılarınız, doğrudan açmamaya çalıştığınız sürece çalışır.

teachApp.config(['$routeProvider', '$locationProvider', function($routeProvider,  $locationProvider) { 
    $routeProvider. 
     when('/', {templateUrl: 'views/login_view.html'}). 
     when('/overview', {templateUrl: 'views/overview_view.html'}). 
     when('/users', {templateUrl: 'views/users_view.html'}). 
     otherwise({redirectTo: '/'}); 
    $locationProvider.html5Mode(true); 
}]); 
15

You: Eğer routeProvider sabit öneki ile kısıtlı değil olabilir böylece

<base href="/teach/" /> 

: Ayrıca href /teach/ değeriyle base etiketi kullanmak isteyebilirsiniz apache yapılandırma yanında

URL’lerinizi de # kullanabilir.

http://localhost/teach/#/overview 

Bu sunucuya bir istek göndermez ve bunun yerine Açısal $ routeProvider tarafından ele alınacaktır.

+1

bu hoş ve basit bir çözümdü. – joseym

İlgili konular