将Angular 6指令放置在延迟加载的模块的组件中时不会初始化

时间:2018-06-27 17:39:34

标签: angular angular2-directives

是Angular 6的新功能。

如果我应用了该指令,我已经在AppModule和appComponent模板中声明了一个指令,在app组件中,有一个路由器出口,一个延迟加载的模块从一开始就被加载。

现在,如果我要将指令应用到延迟加载模块的任何组件模板中,则该指令未初始化。该指令是一个属性指令,我已经正确地声明了它并使用了它,因为在应用程序组件内部它可以正常工作。

没有任何线索,请帮助。

3 个答案:

答案 0 :(得分:10)

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

确保您在SharedModule内声明并导出它

  

我想在应用模块中声明的任何内容都应该对   所有模块

否,这是不正确的,子模块不知道AppModule中的内容。 ChildModule只是另一个独立的模块,例如AppModule。您可能只是将AppModule暴露给ChildModule,但这可能导致循环依赖。这就是您必须使用SharedModule

的原因

答案 1 :(得分:0)

如果有人可以对此有所帮助,那将有所帮助-我花了2天时间浏览论坛并尝试使用其他方法,但无济于事。

如果我将指令放在app.component.html上,但其他任何模块都不起作用,我的指令就会起作用。

我已将导入和声明从app.module.ts复制到ts文件中,我希望它继续进行工作,

有一个在页面上构建卡片的模块,我将以下代码添加到该模块的ts文件中...

import { HighlightDirective } from '../../../highlight.directive';
import { MatchHeightsDirective } from '../../../match-heights.directive';

@NgModule({
  declarations: [
    HighlightDirective,
    MatchHeightsDirective
  ]
})

尽管导入了特定模块,但仍然无法正常工作-仅当我在app.component.html上使用它时,但我只希望在一个区域中使用2条指令。

答案 2 :(得分:-1)

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