启用AoT时,ActivatedRoute.snapshot中的角路由“数据”为空

时间:2019-04-16 15:39:56

标签: angular angular-router angular-aot

我的Angular 7应用程序中有一些路由,这些路由具有data属性,用于不同目的-从activatedRoute.snapshot.data检索。我遇到的问题是,一切都能在开发(JIT编译器)中按预期方式工作,但是一旦我提前进行生产,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本身的问题,但在这里我想知道以前是否有人遇到过并解决过相同的问题?

2 个答案:

答案 0 :(得分:1)

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

快速解决方案:

async

答案 1 :(得分:0)

需要导出路由才能启用AoT

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

运行问题中的代码时,有一些警告并不能完全描述问题所在,但是该信息与该问题一起链接在@ user1254498的答案(https://github.com/angular/angular-cli/issues/5754)中,我能够找出解决办法。

  

./ src / app / app.module.ngfactory.js中的警告112:9550-9556   “在'./modules/pip/pip.module'中找不到导出'ɵ0'(导入为'i65')