2014-05-20 11 views
7

Hier ist mein Problem: aus irgendeinem Grunde auf gültigen Links, Angular nicht finden, was ich suche und gibt die 404. Hier ist die Strecke Konfiguration:Angular Weg umleitet bis 404

$routeProvider.when('/', {templateUrl: 'partials/home.html'}); 
    $routeProvider.when('/home', {templateUrl: 'partials/home.html'}); 
    $routeProvider.when('/menus', {templateUrl: 'partials/menus.html'}); 
    $routeProvider.when('/menu/:menuId', {templateUrl: 'partials/menu.html', controller: 'ShowMenuCtrl'}); 
    $routeProvider.when('/products', {templateUrl: 'partials/products.html'}); 
    $routeProvider.when('/product/:productId', {templateUrl: 'partials/product.html', controller: 'ShowProductCtrl'}); 
    $routeProvider.when('/drink/:productId', {templateUrl: 'partials/product.html', controller: 'ShowProductCtrl'}); 
    $routeProvider.when('/drinks', {templateUrl: 'partials/drinks.html'}); 
    $routeProvider.when('/order', {templateUrl: 'partials/order.html'}); 
    $routeProvider.when('/404', {templateUrl: 'partials/404.html'}); 
    $routeProvider.otherwise({redirectTo: '/404'}); 

Zum Beispiel : ein Link (wie <a href="#/menu/{[{menu.id}]}" translate >SEE</a>) auf/menu/45122245, funktioniert, wenn ich auf/Menüs/anzeigen, aber nicht auf/home/(und die 404 zurück).

Die gleiche URL wird verwendet, das gleiche Objekt mit derselben ID, also weiß ich nicht, was passiert. Ich weiß nicht, ob ein anderer Code Ihnen helfen könnte, lassen Sie mich wissen, was Sie brauchen :)

+1

Versuchen Hinzufügen absolutes URLs zu Ihrer Frage. Es gibt einen großen Unterschied, wenn Sie sich in '/ #/menu' befinden oder Sie sich in'/menu' befinden, wenn Sie einen Link aktivieren. –

+0

Ja, danke, ich werde es versuchen. – enguerranws

+0

Das Gleiche, es gibt die 404 zurück. Das ist wirklich seltsam .../product/4578754 (zum Beispiel) sollte zumindest die richtige Vorlage anzeigen, oder? – enguerranws

Antwort

1

Angular erfordert, dass Sie die URL-Basis im Kopf der Haupt-HTML-Datei() angeben, sofern html5Mode.requireBase auf festgelegt ist false im html5Mode-Definitionsobjekt, das an $ locationProvider.html5Mode() übergeben wird. Damit werden relative URLs immer in diese Basis-URL aufgelöst, auch wenn die ursprüngliche URL des Dokuments anders ist.

2

Kann sein, ich bin zu spät, um diesen Beitrag zu antworten, aber dennoch glaube ich, die folgende Lösung den Trick tun soll,

angular.module('moduleName') 
..config(['$compileProvider', '$routeProvider', function ($compileProvider, $routeProvider) { 
$routeProvider.when('/', {templateUrl: 'partials/home.html'}); 
    $routeProvider.when('/home', {templateUrl: 'partials/home.html'}); 
    $routeProvider.when('/menus', {templateUrl: 'partials/menus.html'}); 
    $routeProvider.when('/menu/:menuId', {templateUrl: 'partials/menu.html', controller: 'ShowMenuCtrl'}); 
    $routeProvider.when('/products', {templateUrl: 'partials/products.html'}); 
    $routeProvider.when('/product/:productId', {templateUrl: 'partials/product.html', controller: 'ShowProductCtrl'}); 
    $routeProvider.when('/drink/:productId', {templateUrl: 'partials/product.html', controller: 'ShowProductCtrl'}); 
    $routeProvider.when('/drinks', {templateUrl: 'partials/drinks.html'}); 
    $routeProvider.when('/order', {templateUrl: 'partials/order.html'}); 
    $routeProvider.when('/404', {templateUrl: 'partials/404.html'}); 
    $routeProvider.otherwise({redirectTo: '/404'}); 
}]) 

.run(['$location', function ($location) { 
    if ($location.path() === '' && $location.$$absUrl.indexOf('/partials') > -1) { 
     $location.path('/home') 
    } 
}]); 
Verwandte Themen