Mã này nằm trong một tệp có tên là route.js
Những điều sau đây không hiệu quả với tôi:
var scripts = document.getElementsByTagName("script")
var currentScriptPath = scripts[scripts.length-1].src;
var baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
sau đây đã làm:
var bu2 = document.querySelector("script[src$='routes.js']");
currentScriptPath = bu2.src;
baseUrl = currentScriptPath.substring(0, currentScriptPath.lastIndexOf('/') + 1);
Thử nghiệm của tôi dựa trên blog sau về việc sử dụng request to lazy load angle:
http://ify.io/lazy-loading-in-angularjs/
request.js tạo ra một bootstrap requestConfig
requestConfig tạo ra một app.js góc cạnh
angle app.js đặt ra các route.js của tôi
Tôi có cùng một mã được cung cấp bởi một khung công tác web revel và asp.net mvc. Trong revel document.getElementsByTagName ("script") đã tạo một đường dẫn đến tệp js bootstrap yêu cầu của tôi chứ KHÔNG PHẢI là các route.js của tôi. trong ASP.NET MVC, nó tạo ra một đường dẫn đến phần tử tập lệnh Liên kết trình duyệt được chèn của Visual Studio được đặt ở đó trong các phiên gỡ lỗi.
đây là mã route.js làm việc của tôi:
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'
]
}
}
};
});
Đây là đầu ra bảng điều khiển của tôi khi chạy từ Revel.
currentScriptPath:http:
baseUrl:http:
bu2:[object HTMLScriptElement] routes.js:13
src:http:
baseUrl:http:
Một điều tốt đẹp khác mà tôi đã làm là tận dụng cấu hình yêu cầu và đặt một số cấu hình tùy chỉnh vào đó. tức là thêm
customConfig: { baseRouteUrl: '/AngularLazyBaseLine/Home/Content' }
sau đó bạn có thể lấy nó bằng cách sử dụng mã sau từ bên trong của route.js
var requireConfig = requirejs.s.contexts._.config;
console.log('requireConfig.customConfig.baseRouteUrl:' + requireConfig.customConfig.baseRouteUrl);
đôi khi bạn cần xác định một baseurl trả trước, đôi khi bạn cần tạo động nó. Sự lựa chọn của bạn cho tình huống của bạn.