2013-10-02 15 views
5

Sto provando a creare un'applicazione a pagina singola in AngularJS con il routing sul lato client eseguito in modalità HTML5. Nel caso in cui gli utenti aggiungano un segnalibro a una pagina sul mio sito, capisco che ho bisogno di uno schema di routing di base sul server, ma voglio davvero che venga sempre pubblicato sulla mia singola homepage e propaghi lo stesso URL sul pezzo di instradamento sul lato client.ASP.NET MVC 4 Percorso per URL SPA angolari Bookmarking

Questo catch-all percorso funziona perfettamente su semplici URL che sono solo una profonda:

routes.MapRoute(
    "Default", // Route name 
    "{*catchall}", // URL with parameters 
    new { controller = "Home", action = "Index" } // Parameter defaults 
); 

URL di esempio: percorsi

http://myapp.com/moreInfo 
http://myapp.com/contactUs 

"moreInfo" e "contactUs" sono appena nominato all'interno angolare . L'unico vero punto di accesso all'applicazione a pagina singola è http://myapp.com. Finora, tutto funziona perfettamente.

Quando provo ad andare più di un percorso profondo, però, l'applicazione va in un ciclo infinito:

http://myapp.com/user/5 

È questo perché il mio percorso sul lato server non è sufficiente a "passare lungo" del " utente/5 "URL per la mia applicazione client? Devo fare qualcosa di speciale per assicurarmi che, non importa quanto profondamente sia annidato l'URL, viene passato correttamente al mio SPA?

risposta

10

Il problema non è con la configurazione di routing, ho una configurazione simile con angular js e mvc 4, e il percorso di seguito funziona correttamente.

routes.MapRoute(
    name: "Application", 
    url: "{*url}", 
    defaults: new { controller = "Home", action = "Index" }, 
    namespaces: new[] { "MyApp.Web.Controllers" }); 

Avete il metodo html5 impostato su true nel metodo di configurazione angolare?

$locationProvider.html5Mode(true); 

Si potrebbe provare a inviare una richiesta di ottenere la tua app con violinista e guardare la risposta. Se è un 301 o 302, allora hai un problema di reindirizzamento del lato server. Se è 200, allora il tuo codice angolare/js potrebbe essere il problema.

0

Se ho capito bene, si vuole che '/ user/5' sia dato al motore di routing in Angular. Se questo è il caso, Angular si occupa del percorso dopo l'hash. Questo significa che il percorso che si desidera è

http://myapp.com#/user/5 

Sarà inoltre necessario configurare il $ routeProvider correttamente con un percorso simile:

angular.module('yourApp', []). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
     when('/user/:id', {templateUrl: 'SOME_HTML_FILE'}). 
     otherwise({redirectTo: '/'}); 
}]); 

Si sarebbe quindi bisogno di ottenere il parametro percorso nel controllore:

function someController($scope, $routeParams) { 
    if($routeParams.id){ 
     alert('Super Fly!'); 
    } 
}