我可以在模块中声明指令并仅在该模块的组件中使用它吗?

Can I declare a directive within a module and use it only within components in that module?

我的 Angular (v7) 应用程序由几个模块组成。我有一个 AppModule,其中包含应用程序的核心部分,以及几个提供应用程序很少使用的部分的独立模块。 (我 还没有 延迟加载这些其他模块,但将来可能会)。

在其中一个模块中(我们称之为 OtherModule),我同时拥有组件和指令。这些指令 OtherModule 中的组件使用。将这些指令的定义“封装”在 OtherModule.

中(对我来说)是有意义的

但是,当我尝试使用来自 OtherModule 的组件之一时,如果该组件使用来自 OtherModule:

的指令之一,我将收到错误消息

Property binding appOther not used by any directive on an embedded template. Make sure that the property name is spelled correctly and all directives are listed in the "@NgModule.declarations

(在本例中,appOther 是在 OtherModule 中定义的指令)。

您可以看到(或看不到)所有这一切in this StackBlitz

我已经尝试在 AppModule 中声明该指令,但是 (a) 我真的不想用 OtherModule 工作原理的私人细节来污染该模块,并且 (b) 它然后抱怨该指令被声明了两次。

我在这里做错了什么?这似乎是一个显而易见的要求(如果这种关注点分离是不可能的,那我们为什么要有模块呢?)。

看看你的实现我认为你必须删除 de * 和 ="true" 并只留下选择器 appOther

就这样:

<p appOther>

模块声明没问题,你在 OtherModule 中正确声明了指令而不是导出它们,你不能在 AppModule 中也声明它。如果在其他情况下你想共享该指令,你应该在共享模块中声明它