此代码位于名为 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 延迟加载 Angular 的博客:
http://ify.io/lazy-loading-in-angularjs/
require.js 产生一个 requireConfig 引导程序
requireConfig 产生一个有角度的 app.js
angular app.js 产生我的 routes.js
revel web 框架和 asp.net mvc 提供了相同的代码。
陶醉
document.getElementsByTagName("脚本")
生成了我需要引导 js 文件的路径,而不是我的 routes.js。
在 ASP.NET MVC 中,它生成了 Visual Studio 的注入浏览器链接脚本元素的路径,该元素在调试会话期间放置在那里。
这是我的工作 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://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/
我所做的另一件好事是利用 require 配置并在其中放入一些自定义配置。
即添加
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
然后您可以使用 routes.js 内部的以下代码来获取它
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
有时您需要预先定义一个 baseurl,有时您需要动态生成它。根据您的情况选择。