Dieser Code befindet sich in einer Datei namens route.js
Folgendes hat bei mir nicht funktioniert:
var scripts = document.getElementsByTagName("script")
var currentScriptPath = scripts[scripts.length-1].src;
var baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
Folgendes tat:
var bu2 = document.querySelector("script[src$='routes.js']");
currentScriptPath = bu2.src;
baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
Mein Test basiert auf dem folgenden Blog über die Verwendung von Angle Load Load Angular:
http://ify.io/lazy-loading-in-angularjs/
require.js erzeugt einen requireConfig-Bootstrap
requireConfig erzeugt eine eckige app.js.
eckige app.js erzeugt meine route.js
Ich hatte den gleichen Code, der von einem Revel-Webframework und asp.net mvc bereitgestellt wurde. In schwelgen document.getElementsByTagName ("script") wurde ein Pfad zu meiner erforderlichen Bootstrap-JS-Datei und NICHT zu meiner Routen.js erstellt. In ASP.NET MVC wurde ein Pfad zum injizierten Browser Link-Skriptelement von Visual Studio erstellt, das während der Debugging-Sitzungen dort abgelegt wird.
Dies ist mein Arbeitsrouten.js Code:
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'
]
}
}
};
});
Dies ist meine Konsolenausgabe, wenn ich von Revel aus laufe.
currentScriptPath:http://localhost:9000/public/ngApps/1/requireBootstrap.js routes.js:8
baseUrl:http://localhost:9000/public/ngApps/1/ routes.js:10
bu2:[object HTMLScriptElement] routes.js:13
src:http://localhost:9000/public/ngApps/1/routes.js routes.js:14
baseUrl:http://localhost:9000/public/ngApps/1/
Eine andere nette Sache, die ich getan habe, ist, die erforderliche Konfiguration zu nutzen und einige benutzerdefinierte Konfigurationen darin zu platzieren. dh hinzufügen
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
Sie können es dann erhalten, indem Sie den folgenden Code innerhalb von route.js verwenden
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
Manchmal müssen Sie eine Baseurl im Voraus definieren, manchmal müssen Sie sie dynamisch generieren. Ihre Wahl für Ihre Situation.