Angular 2辅助路由器在浏览器重新加载

时间:2016-10-07 19:43:50

标签: angular router angular2-routing

经过数小时的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

1 个答案:

答案 0 :(得分:1)

您可以通过实施HashLocationStrategy轻松解决此问题,#为您的所有路线添加http://RootDirectory/CurrentURL,因此http://RootDirectory/#/CurrentURL变为HashLocationStrategy。您可以通过向AppModule提供商添加{ provide: LocationStrategy, useClass: HashLocationStrategy } 来实现此目标:

LocationStrategy

您需要从HashLocationStrategy

导入@angular/commonimport { 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