Angular 路由 'data' 在 ActivatedRoute.snapshot 中为空,当启用 AoT 时

Angular route 'data' is empty in ActivatedRoute.snapshot when AoT is enabled

我的 Angular 7 应用程序中有几条路线有 data 属性,用于不同的目的 - 从 activatedRoute.snapshot.data 检索。我遇到的问题是在开发(JIT 编译器)中一切都按预期工作,但是一旦我使用 Ahead-of-time 进入生产,data 是一个空对象。

重现的最低限度:在路由中添加 data 属性,例如

app-routing.module.ts中:

...
const routes: Routes = [
    {
        path: 'foo',
        component: fooComponent,
        data: {
            bar: 'bar'
        }
    }
];
...

然后 console.log() 匹配路由的组件中的 activatedRoute.snapshot.data 例如

foo.component.ts:

...
import { ActivatedRoute } from '@angular/router';
...

constructor(
    private activatedRoute: ActivatedRoute
) { }

ngOnInit() {
    console.log(this.activatedRoute.snapshot.data);
}

使用 ng serve (JIT),您应该在控制台中获得 data。 使用 ng serve --aot=true(提前)data 是控制台中的空对象。

除了在生产中禁用 AoT 之外,我没有太多可以尝试的其他方法,由于性能优势,这并不理想。这看起来像是 AoT 本身的问题,但我想知道以前是否有人遇到过并解决过同样的问题?

好像是这个问题:https://github.com/angular/angular-cli/issues/5754

快速解决方案:

// app.component.ts
constructor(private router: Router) {
  // reset routes
  router.resetConfig(routes);
}

需要导出路由才能使用 AoT 启用

export const routes: Routes = [
    {
        path: 'foo',
        component: fooComponent,
        data: {
            bar: 'bar'
        }
    }
];

当 运行 问题中的代码时,出现的警告并未准确描述问题所在,但这条信息连同@user1254498 的回答中链接的问题(https://github.com/angular/angular-cli/issues/5754) 我找到了解决方法。

WARNING in ./src/app/app.module.ngfactory.js 112:9550-9556 "export 'ɵ0' (imported as 'i65') was not found in './modules/pip/pip.module'