单个延迟加载的模块中的Angular 6,共享模块会导致应用无法在更改中工作

时间:2018-07-26 22:38:55

标签: angular typescript angular6

嗨,我有一个奇怪的问题,当我使用角度5时,这并不是问题。

这是情况

在我拥有的应用路由模块中

{
    path: 'moduleA',
    pathMatch: 'full',
    loadChildren: './modules/moduleA.module#moduleA'
},
{
    path: 'moduleB',
    pathMatch: 'full',
    loadChildren: './modules/moduleB.module#moduleB'
},

然后我有一个共享模块,该模块只有一个要评估的组件,并且已声明并导出了..

import { NgModule,  ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RatingComponent } from './components/rating/rating.component';
import { RatingService } from './services/rating.service';

@NgModule({
    imports: [
        CommonModule
    ],
    declarations: [
        RatingComponent
    ],
    exports: [
        RatingComponent
    ],
    providers: [
        RatingService
    ]
})
export class SharedModule {
    static forRoot(): ModuleWithProviders {
        return {
            ngModule: SharedModule,
            providers: [
                RatingService
            ]
        };
    }
}

在两个模块中都导入了共享模块...当我运行ng serve --aot时,该应用程序运行良好,但是当我更改了Shared,ModuleA或ModuleB的代码时,CLI可以成功编译,但是在浏览器中得到错误:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'call' of undefined 
TypeError: Cannot read property 'call' of undefined at __webpack_require__ (bootstrap:81)

我必须停止cli并再次运行它,它才能正常工作。有谁知道可能是什么问题?

它仅在版本6(尝试6.0.7和6.1.0)上发生,而如果我在版本5上尝试它,则没有任何问题。另外,如果我从ModuleA或B中排除了SharedModule,那么它将很好用,但是在那种情况下,该模块就不会共享。

谢谢

1 个答案:

答案 0 :(得分:0)

经过深入分析后,发现即使该应用程序也可以处理模块的延迟加载,为了能够正常工作而不会出现上述问题,事实证明,在app.module.ts文件中,我必须导入我使用lazyload加载的所有模块。