このコードは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);
私のテストは、require to lazy loadangularの使用に関する次のブログに基づいています:http:
//ify.io/lazy-loading-in-angularjs/
require.jsはrequireConfigブートストラップを生成します
requireConfigは角度のあるapp.jsを生成します
角度のあるapp.jsがroutes.jsを生む
同じコードがrevelWebフレームワークとasp.netmvcによって提供されていました。revelで、document.getElementsByTagName( "script")は、routes.jsではなくrequire bootstrapjsファイルへのパスを生成しました。ASP.NET MVCでは、デバッグセッション中に配置されるVisualStudioの挿入されたブラウザーリンクスクリプト要素へのパスを生成しました。
これは私の作業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'
]
}
}
};
});
これは、Revelから実行したときのコンソール出力です。
currentScriptPath:http:
baseUrl:http:
bu2:[object HTMLScriptElement] routes.js:13
src:http:
baseUrl:http:
私が行ったもう1つの優れた点は、require configを利用して、いくつかのカスタム構成を組み込むことです。すなわち追加
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
その後、routes.js内から次のコードを使用して取得できます
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
baseurlを事前に定義する必要がある場合もあれば、動的に生成する必要がある場合もあります。あなたの状況のためのあなたの選択。