Questo codice si trova in un file chiamato routes.js
Quanto segue non ha funzionato per me:
var scripts = document.getElementsByTagName("script")
var currentScriptPath = scripts[scripts.length-1].src;
var baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
quanto segue ha fatto:
var bu2 = document.querySelector("script[src$='routes.js']");
currentScriptPath = bu2.src;
baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
Il mio test si basa sul seguente blog sull'utilizzo di require to lazy load angular:
http://ify.io/lazy-loading-in-angularjs/
require.js genera un bootstrap requireConfig
requireConfig genera un app.js angolare
angular app.js genera i miei routes.js
Ho avuto lo stesso codice servito da un framework web revel e asp.net mvc. In revel document.getElementsByTagName ("script") ha prodotto un percorso per il mio file require bootstrap js e NON per il mio routes.js. in ASP.NET MVC ha prodotto un percorso per l'elemento di script Browser Link iniettato di Visual Studio che viene inserito durante le sessioni di debug.
questo è il mio codice di lavoro routes.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'
]
}
}
};
});
Questo è l'output della mia console durante l'esecuzione da Revel.
currentScriptPath:http:
baseUrl:http:
bu2:[object HTMLScriptElement] routes.js:13
src:http:
baseUrl:http:
Un'altra cosa carina che ho fatto è sfruttare la configurazione require e inserirvi alcune configurazioni personalizzate. cioè aggiungi
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
puoi quindi ottenerlo utilizzando il codice seguente dall'interno di routes.js
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
a volte è necessario definire un baseurl in anticipo, a volte è necessario generarlo dinamicamente. La tua scelta per la tua situazione.