2014-06-06 13 views
5

Considerare il seguente codice leggermente modificato dalla wiki del router.

var myApp = angular.module('myApp',['ui.router']); 

myApp.config(function($stateProvider, $urlRouterProvider, $locationProvider) { 
    // for any unmatched url 
    $urlRouterProvider.otherwise("/state1"); 

    $locationProvider.html5Mode(true); 

    // now set up the states 
    $stateProvider 
     .state('state1', { 
      url: '/state1', 
      templateUrl: "partials/state1.html" 
     }) 
     .state('state1.list', { 
      url: "/list", 
      templateUrl: "partials/state1.list.html", 
      controller: function($scope) { 
       $scope.items = ["A", "List", "of", "Items"]; 
      } 
     }) 
     .state('state2', { 
      url: "/state2", 
      templateUrl: "partials/state2.list.html", 
      controller: function($scope) { 
       $scope.things = ["a", "set", "of", "things"]; 
      } 
     }) 
}); 

esecuzione Python 3 di SimpleHTTPServer, ottengo un 404 error quando si cerca di accedere a: http://localhost:8000/state1234324324.

Perché non $urlRouterProvider.otherwise("/state1"); reindirizzare tutte le rotte sconosciute hanno fatto a /state1, che per questo question, ha un definito state associata al /state1 URL?

risposta

9

Questo perché quando si preme il server con url come "/ state123413", restituisce direttamente la risposta 404 (non avviene alcun instradamento sul lato client).

Quello che devi fare è avere un itinerario di catchall. per esempio in express puoi fare

app.get('/*', function(req, res){ 
    res.render('defaulttemplate') 
} 

Questo forzerà il routing sul lato client. Si prega di consultare il router ui faq per i server comuni per impostare il percorso di catchall.

+0

perché questo non funziona correttamente con l'ui-router? le mie rotte non funzionano da quando ho aggiunto quella correzione, anche se ora funziona diversamente ... –

Problemi correlati