是Angular 6的新功能。
如果我应用了该指令,我已经在AppModule和appComponent模板中声明了一个指令,在app组件中,有一个路由器出口,一个延迟加载的模块从一开始就被加载。
现在,如果我要将指令应用到延迟加载模块的任何组件模板中,则该指令未初始化。该指令是一个属性指令,我已经正确地声明了它并使用了它,因为在应用程序组件内部它可以正常工作。
没有任何线索,请帮助。
答案 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)
如果在功能模块/共享模块中创建指令,请确保需要将它们放在声明部分和导出部分中。将此功能/共享模块导入使用的地方。