【问题标题】:Can I declare a directive within a module and use it only within components in that module?我可以在模块中声明指令并仅在该模块的组件中使用它吗?
【发布时间】:2019-04-18 17:46:31
【问题描述】:

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

在这些模块之一(我们称之为OtherModule)中,我既有组件又有指令。这些指令OtherModule 中的组件使用。 (对我而言)将这些指令的定义“封装”在OtherModule 中是有意义的。

但是,当我尝试使用来自 OtherModule 的组件之一时,如果该组件使用来自 OtherModule 的指令之一,我会收到错误消息:

属性绑定 appOther 未被嵌入模板上的任何指令使用。确保属性名称拼写正确,并且所有指令都列在“@NgModule.declarations

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

in this StackBlitzin this StackBlitz.

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

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

【问题讨论】:

  • 它似乎与<p appOther> 一起工作(在删除* 之后)。见this stackblitz
  • @ConnorsFan:我看起来 像它工作,但实际上发生的所有事情是它不再将属性识别为指令。尝试将指令名称更改为 spellingMistake ,这对您的 stackblitz 没有任何影响。
  • 再次尝试 stackblitz。我不知道是什么让你认为它不起作用,因为原始指令什么也没做。
  • @JanRecker:我不确定这是写给我还是给 ConnorsFan。我知道这一点 - 事实上,我基本上遵循了在此处创建结构指令的建议:angular.io/guide/… 使用星号的地方。
  • @ConnorsFan:哇。我很高兴(也很感激)你让它工作了,虽然我不知道为什么。玩你的堆栈闪电战,似乎你可以包含或不包含星号,包含或不包含值但不能同时包含,这就是我所拥有的。诡异的。无论如何,它似乎与模块无关,这是我认为问题所在。感谢您的帮助。

标签: angular angular-directive angular-module


【解决方案1】:

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

就这样:

<p appOther>

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

【讨论】:

  • 谢谢。这也是 ConnorsFan 的建议 - 实际上,*appOther 和 appOther="true" 似乎都有效,但 不是 *appOther="true"。无论如何,主要的一点是 这与模块无关,这正是我所关注的。
  • 伟大的@Gary McGill,很高兴知道现在它正在工作,是的,似乎其中一个工作但不能同时工作。但是,是的,重点是,这就是我包含第二段的原因;)
猜你喜欢
  • 2019-01-31
  • 1970-01-01
  • 2017-09-25
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2019-03-09
  • 2018-01-28
相关资源
最近更新 更多