Angular 路由器导航错误:无法读取 undefined

时间:2021-01-26 22:40:01

标签: angular angular-router

我正在将 Angular 9 与 UpgradeModule 一起用于加载在旧式 JSP Web 应用程序中的应用程序。出于这个原因,我还使用了 MockLocationStrategy 来防止路由器弄乱旧应用程序的 URL(同时仍然使用路由器来更改 Angular 应用程序内的视图)。

Angular 应用在​​大部分时间里都能完美运行。问题是,在更改旧 url(地址栏中的那个)后,Angular 路由器无法导航到带有错误的路由:

TypeError: Cannot read property 'extractedUrl' of undefined
    at eval [as project] (eval at <anonymous> (libs.js:567), <anonymous>:1:440708)
    at e._next (eval at <anonymous> (libs.js:567), <anonymous>:1:320375)
    at e.next (eval at <anonymous> (libs.js:567), <anonymous>:1:16834)
    at e.notifyNext (eval at <anonymous> (libs.js:567), <anonymous>:1:321037)
    at e._next (eval at <anonymous> (libs.js:567), <anonymous>:1:27334)
    at e.next (eval at <anonymous> (libs.js:567), <anonymous>:1:16834)
    at eval (eval at <anonymous> (libs.js:567), <anonymous>:1:24524)
    at Q (eval at <anonymous> (libs.js:567), <anonymous>:1:27870)
    at e._innerSub (eval at <anonymous> (libs.js:567), <anonymous>:1:320605)
    at e._next (eval at <anonymous> (libs.js:567), <anonymous>:1:320440)
    at j (zone.min.js:1)
    at j (zone.min.js:1)
    at zone.min.js:1
    at e.invokeTask (zone.min.js:1)
    at Object.onInvokeTask (eval at <anonymous> (libs.js:567), <anonymous>:1:128743)
    at e.invokeTask (zone.min.js:1)
    at t.runTask (zone.min.js:1)
    at g (zone.min.js:1)
    at t.invokeTask [as invoke] (zone.min.js:1)
    at _ (zone.min.js:1)

我能够识别出引发错误的 Angular 路由器代码部分:

export function applyRedirects(
    moduleInjector: Injector, configLoader: RouterConfigLoader, urlSerializer: UrlSerializer,
    config: Routes): MonoTypeOperatorFunction<NavigationTransition> {
  return switchMap(
      t => applyRedirectsFn(moduleInjector, configLoader, urlSerializer, t.extractedUrl, config)
               .pipe(map(urlAfterRedirects => ({...t, urlAfterRedirects}))));
}

[source]

applyRedirects 用于在路线导航过程中对 NavigationTransaction 对象应用转换。我无法理解的奇怪部分是,在调试时,事务对象在流上的前一个运算符中正确定义,但在到达 switchMap 上的 applyRedirects 时却没有。

switchMap(t => {
    const transition = this.transitions.getValue();
    eventsSubject.next(new NavigationStart(
        t.id, this.serializeUrl(t.extractedUrl), t.source,
        t.restoredState));
    if (transition !== this.transitions.getValue()) {
        return EMPTY;
    }

    // This delay is required to match old behavior that forced
    // navigation to always be async
    return Promise.resolve(t); // HERE T IS DEFINED
}),

// ApplyRedirects
applyRedirects(
    // INSIDE applyRedirects T IS UNDEFINED
    this.ngModule.injector, this.configLoader, this.urlSerializer,
    this.config),

[source]

谁能帮我了解可能出了什么问题?我什至在考虑这可能是 Angular Router 的错误。

PS:不幸的是,我在一家监管很多的金融机构工作,我无法发布任何源代码或屏幕截图,但我会尽量提供尽可能多的信息。

0 个答案:

没有答案