2012-10-12 159 views
18

¿Es posible desarrollar una aplicación Angular.js de forma que se abstraiga de la ruta del directorio web en la que se desplegará?Enrutamiento en subdirectorio en Angular.js

Estoy tratando de poner una aplicación Angular.js en un subdirectorio de servidor web http://example.com/myproject/, pero el enrutador me redirige a la raíz del servidor web - http://example.com.

A continuación es mi aplicación angularjs:

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

más uno para el nombre de usuario :) – silver

Respuesta

25

intente configurar un <base href="/sudirectory"/> en su <head></head>. Eso es lo que necesitaba hacer para que el mío funcionara, IIRC

Advertencia: Esto interferirá con las etiquetas de anclaje que tengan href = "#", y actúen como raíz de las imágenes srcs y similares.

+0

¡Eso funcionó! Gracias blesh. – sssilver

+5

Otro consejo que podría ayudar: no olvide utilizar rutas de acceso relativas en lugar de absolutas para los recursos de plantillas parciales del enrutador, después de configurar . – sssilver

+1

Funciona para rutas relativas, pero tengo llamadas AJAX que se especifican como 'getSomething /' que funcionaría, excepto que necesitaba establecerlas como '/ getSomething /', ya que de lo contrario se adjuntaría a la URL que puede tener otra información de enrutamiento en eso. Quiero que las llamadas AJAX se resuelvan en 'mydomain/getSomething /', pero si mi enrutador angular me tiene en 'mydomain/article/1 /', se agregará. No tuve más remedio que crear una variable base_url global y anteponerla a todas mis URL AJAX. Sería bueno simplemente configurar esto como una configuración dentro de Angular, pero afortunadamente el proyecto es lo suficientemente pequeño como para hacerlo a mano. –