Angular 6 指令在延迟加载模块的组件中未初始化

Angular 6 directive is not initialized when placed in lazy loaded module's component

对 Angular 6.

很陌生

我已经在 AppModule 和 appComponent 模板中声明了一个指令,如果我应用该指令它就可以工作,在应用程序组件中有一个路由器出口,其中一个延迟加载模块在一开始就被加载。

现在如果我想在惰性加载模块的任何组件模板中应用该指令,则该指令未被初始化。该指令是一个属性指令,我已经正确声明并使用了它,因为在应用程序组件中它工作正常。

没有得到任何线索,请帮助。

我发现您的设计存在问题。不要将 directive 放在 AppModule 中,而是创建一个 SharedModule,然后在其中实现 directive。在您应用的其他任何地方导入 SharedModule。这样你就可以从外部组件(从其他模块)访问你的directive

确保在 SharedModule

中声明并导出它

I thought if anything declared in app module should be available to all modules

不,这是不正确的,子模块不知道你里面有什么AppModuleChildModule 只是另一个独立的模块,如 AppModule。您可以简单地将 AppModule 暴露给 ChildModule,但这可能会导致循环依赖。这就是您必须使用 SharedModule

的原因

如果我们在功能 module/shared 模块中创建指令,请确保我们需要将它们放入声明部分和导出部分。在使用它的地方导入这个 feature/shared 模块。