指令在子模块中不起作用

Posted

技术标签:

【中文标题】指令在子模块中不起作用【英文标题】:Directive doesn't work in a sub module 【发布时间】:2017-05-16 23:16:54 【问题描述】:

我无法使指令在延迟加载的模块中工作。我已经阅读了文档,我只是将指令添加到我的主模块的声明数组中。该指令在该模块上按预期工作,但在延迟加载的模块中不起作用。它甚至可以防止由于模板错误而打开延迟加载的模块:

Can't bind to 'myHighlight' since it isn't a known property of 'p'

这是我的Plunker。

点击“转到子”后在控制台中检查错误

【问题讨论】:

文档中提到过,但我不明白,因为在主模块中,指令声明得很好......angular.io/docs/ts/latest/guide/… 澄清问题,或者可能是另一个问题?当您发布代码链接时,请确保问题代码附有问题。 @RomanC 抱歉,解释不佳。我已经编辑了问题。 【参考方案1】:

那是因为你的指令是在AppModule 中声明的,并且它只在那里可用。如果你想在两个模块中使用指令,你可以创建SharedModule,然后从那里声明和导出指令,然后在你的AppModule和你的ChildModule中导入SharedModule

@NgModule(
  declarations: [ HighlightDirective ],
  exports: [ HighlightDirective ]
)

export class SharedModule 

现在您只需将SharedModule 添加到AppModuleChildModule 的导入中。

注意:

您必须从AppModule 的声明中删除您的指令,因为它只能声明一次。

【讨论】:

但是 AppModule 中声明的声明不应该在整个应用程序中全局可用吗? @echonax 不,让任何东西在全球范围内可用的唯一方法就是我所描述的方法,至少目前是这样。【参考方案2】:

我在我们的项目中遇到了类似的问题。我有 shared.module 但它仍然抛出错误

无法绑定到“pathForUploading”,因为它不是“div”的已知属性

我有这个代码

<div class="avatar"
     fileUploader
     [pathForUploading]="'path'"
     (onFileUploaded)="updateAvatar()"></div>

将属性调用更改为后它就消失了

pathForUploading="path"

希望对大家有所帮助

【讨论】:

我在没有 * 的情况下使用 No provider for TemplateRef!

以上是关于指令在子模块中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

父组件的类在子组件中不起作用

UIButton 在子视图控制器中不起作用

当在子组件中添加其他 MouseListener 时,父组件的 MouseListener 在子组件中不起作用

Microsoft Access Where Condition 在子窗体中不起作用

MongoDb - $match 过滤器在子文档中不起作用

Crystal Reports v13.0.2000.0.:为啥“where”子句在子报表中不起作用?