Ce code se trouve dans un fichier appelé routes.js
Ce qui suit n'a pas fonctionné pour moi:
var scripts = document.getElementsByTagName("script")
var currentScriptPath = scripts[scripts.length-1].src;
var baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
ce qui suit a fait:
var bu2 = document.querySelector("script[src$='routes.js']");
currentScriptPath = bu2.src;
baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
Mon test est basé sur le blog suivant sur l'utilisation de require to lazy load angular:
http://ify.io/lazy-loading-in-angularjs/
require.js engendre un bootstrap requireConfig
requireConfig engendre un app.js angulaire
angular app.js engendre mes routes.js
J'ai eu le même code servi par un framework web revel et asp.net mvc. Dans revel document.getElementsByTagName ("script") a produit un chemin vers mon fichier js de bootstrap requis et PAS vers mon routes.js. dans ASP.NET MVC, il a produit un chemin vers l'élément de script de lien de navigateur injecté de Visual Studio qui y est placé pendant les sessions de débogage.
c'est mon code de travail 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'
]
}
}
};
});
Ceci est ma sortie de console lors de l'exécution de Revel.
currentScriptPath:http:
baseUrl:http:
bu2:[object HTMLScriptElement] routes.js:13
src:http:
baseUrl:http:
Une autre bonne chose que j'ai faite est de profiter de la configuration requise et d'y mettre des configurations personnalisées. ie ajouter
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
vous pouvez ensuite l'obtenir en utilisant le code suivant à l'intérieur de routes.js
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
parfois vous devez définir un baseurl à l'avance, parfois vous devez le générer dynamiquement. Votre choix pour votre situation.