Este código está en un archivo llamado route.js
Lo siguiente no funcionó para mí:
var scripts = document.getElementsByTagName("script")
var currentScriptPath = scripts[scripts.length-1].src;
var baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
lo siguiente hizo:
var bu2 = document.querySelector("script[src$='routes.js']");
currentScriptPath = bu2.src;
baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
Mi prueba se basa en el siguiente blog sobre el uso de require to lazy load angular:
http://ify.io/lazy-loading-in-angularjs/
require.js genera un bootstrap requireConfig
requireConfig genera una aplicación angular.js
angular app.js engendra mis rutas.js
Tuve el mismo código servido por un framework web revel y asp.net mvc. En revel document.getElementsByTagName ("script") produjo una ruta a mi archivo obligatorio bootstrap js y NO a mis rutas.js. en ASP.NET MVC produjo una ruta al elemento de secuencia de comandos de enlace de navegador inyectado de Visual Studio que se coloca allí durante las sesiones de depuración.
este es mi código de trabajo route.js:
define([], function()
{
var scripts = document.getElementsByTagName("script");
var currentScriptPath = scripts[scripts.length-1].src;
console.log("currentScriptPath:"+currentScriptPath);
var baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
console.log("baseUrl:"+baseUrl);
var bu2 = document.querySelector("script[src$='routes.js']");
currentScriptPath = bu2.src;
console.log("bu2:"+bu2);
console.log("src:"+bu2.src);
baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
console.log("baseUrl:"+baseUrl);
return {
defaultRoutePath: '/',
routes: {
'/': {
templateUrl: baseUrl + 'views/home.html',
dependencies: [
'controllers/HomeViewController',
'directives/app-style'
]
},
'/about/:person': {
templateUrl: baseUrl + 'views/about.html',
dependencies: [
'controllers/AboutViewController',
'directives/app-color'
]
},
'/contact': {
templateUrl: baseUrl + 'views/contact.html',
dependencies: [
'controllers/ContactViewController',
'directives/app-color',
'directives/app-style'
]
}
}
};
});
Esta es la salida de mi consola cuando se ejecuta desde Revel.
currentScriptPath:http:
baseUrl:http:
bu2:[object HTMLScriptElement] routes.js:13
src:http:
baseUrl:http:
Otra cosa buena que he hecho es aprovechar la configuración requerida y poner algunas configuraciones personalizadas en ella. es decir, agregar
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
luego puede obtenerlo usando el siguiente código desde el interior de routes.js
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
a veces necesitas definir una baseurl por adelantado, a veces necesitas generarla dinámicamente. Tu elección para tu situación.