经过数小时的Angular-wrangling后,我成功创建了功能性的辅助子路线,我在整个应用程序中都可以重复使用。排序。
辅助路由在初始页面加载时完美运行,它们确实会影响浏览器历史记录。但是,如果我重新加载URL(或在初始加载中包含辅助引用),我会收到main.js的文件未找到错误。
错误的原因很明显,因为我可以清楚地看到我的应用正在尝试获取http://*RootDirectory*/*CurrentURL*/*AppDirectory*/main.js
。
该应用由于某种原因认为CurrentURL
在尝试加载RootDirectory
时是main.js
。它最初也无法从index.html
加载我的所有链接文件,但我通过更改其路径以引用我的网站根目录来修复此问题。
我认为我可以用main.js
以同样的方式解决这个问题,但是我无法弄清楚这个错误的相对路径在哪里因为Angular2(因为它的所有荣耀)在提供连贯错误时吮吸了直肠消息!
以下是我已尝试过的事情:
将我的outDir更改为tsconfig中的绝对路径。
将我的主应用程序包更改为systemjs config中的绝对路径。
记住我已尝试过的其他内容。
跳出办公室的窗户。
kThxBye
答案 0 :(得分:1)
您可以通过实施HashLocationStrategy
轻松解决此问题,#
为您的所有路线添加http://RootDirectory/CurrentURL
,因此http://RootDirectory/#/CurrentURL
变为HashLocationStrategy
。您可以通过向AppModule
提供商添加{ provide: LocationStrategy, useClass: HashLocationStrategy }
来实现此目标:
LocationStrategy
您需要从HashLocationStrategy
@angular/common
和import { LocationStrategy, HashLocationStrategy } from '@angular/common';
static function OnBeforeRequest(oSession: Session) {
//detect prefetch response
if (oSession.oRequest.headers.Exists("X-FiddlerPrefetch")) {
//dump response into a variable
oSession.utilDecodeRequest();
prefetchResponse = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);
}
//detect uri that was prefetched
if (oSession.uriContains("/some_uri")) {
//wait for prefetch - cant find any docs for how to 'sleep' here
// while (prefetchResponse === "") {
// Sleep(1);
// }
//use cached response
oSession.utilCreateResponseAndBypassServer();
oSession.utilSetResponseBody(prefetchResponse);
}
//redirect traffic to man-in-the-middle
if (oSession.HostnameIs("some_server")) {
oSession["x-overrideHost"] = "man-in-the-middle:443";
}
...
您可以详细了解here。