2012-10-12 15 views
18

È possibile sviluppare un'applicazione Angular.js in un modo che sarebbe astratto dal percorso della directory Web in cui verrà distribuito?Instradamento nella sottodirectory in Angular.js

Sto tentando di inserire un'app Angular.js in una sottodirectory del server Web http://example.com/myproject/, ma il router mi reindirizza alla radice del server Web - http://example.com.

Qui di seguito è la mia app Angular.js:

var myproject = angular.module('myproject', []); 

myproject.config(function($routeProvider, $locationProvider) { 
    $routeProvider. 
    when('/', {templateUrl: 'partials/index.html', controller: IndexCtrl}). 
    otherwise({redirectTo: '/'}); 

    $locationProvider.html5Mode(true); 
}); 



function IndexCtrl($scope, $location) { 

} 
+1

più uno per il nome utente :) – silver

risposta

25

provate ad impostare un <base href="/sudirectory"/> nella vostra <head></head>. Questo è quello che dovevo fare per far funzionare la mia, IIRC

Parola di cautela: questo pasticcia con qualsiasi tag di ancoraggio che abbia href = "#", oltre a fungere da root per immagini srcs e simili.

+0

Che ha fatto il trucco! Grazie blesh. – sssilver

+5

Un altro suggerimento che potrebbe aiutare: non dimenticare di utilizzare percorsi relativi anziché assoluti per le risorse del modello parziale del router, dopo aver impostato . – sssilver

+1

Funziona per percorsi relativi, ma ho chiamate AJAX che sono specificate come 'getSomething /' che funzionerebbero tranne che ho bisogno di impostarle come '/ getSomething /' poiché altrimenti verrebbero aggiunte all'URL che potrebbe avere altre informazioni di routing in esso. Voglio che le chiamate AJAX si risolvano in "mydomain/getSomething /", ma se il mio router Angolare mi ha in "mydomain/article/1 /" viene aggiunto. Non ho avuto altra scelta che creare una variabile base_url globale e aggiungerla a tutti i miei URL AJAX. Sarebbe bello impostare questo come una configurazione all'interno di Angular, ma fortunatamente il progetto è abbastanza piccolo da poterlo fare a mano. –