Цей код знаходиться у файлі, який називається routes.js
Мені не вдалося:
var scripts = document.getElementsByTagName("script")
var currentScriptPath = scripts[scripts.length-1].src;
var baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
зробили:
var bu2 = document.querySelector("script[src$='routes.js']");
currentScriptPath = bu2.src;
baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
Мій тест заснований на наступному блозі про використання вимоги до лінивого навантаження angular:
http://ify.io/lazy-loading-in-angularjs/
require.js породжує bootstrap requireConfig
requireConfig породжує angular app.js
angular app.js породжує my routes.js
У мене був той самий код, який обслуговував веб-фреймворк revel та asp.net mvc. У файлі revel document.getElementsByTagName ("сценарій") створено шлях до мого файлу js bootstrap, а не до маршрутів.js. в ASP.NET MVC він створив шлях до вбудованого елемента сценарію Browser Link, який вводиться туди під час сесій налагодження.
це мій робочий код 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'
]
}
}
};
});
Це мій вихід на консолі під час запуску з Revel.
currentScriptPath:http:
baseUrl:http:
bu2:[object HTMLScriptElement] routes.js:13
src:http:
baseUrl:http:
Ще одна приємна річ, яку я зробив, - скористатися конфігурацією require і помістити в неї деякі власні конфігурації. тобто додати
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
Ви можете отримати його, скориставшись наведеним нижче кодом зсередини маршрутів.js
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
іноді вам потрібно визначити базовий елемент заздалегідь, іноді вам потрібно динамічно його генерувати. Ваш вибір для вашої ситуації.