在另一个指令的宿主中使用指令

Posted

技术标签:

【中文标题】在另一个指令的宿主中使用指令【英文标题】:Use directive in host of another Directive 【发布时间】:2016-09-05 23:53:36 【问题描述】:

我想通过使用主机属性将指令添加到另一个指令中的元素,但似乎没有办法引用另一个指令。

@Directive(
    selector: '[one]',
    host:  '[two]': '"some-value"' 
    // How can I reference DirectiveTwo here?
)
export class DirectiveOne  

@Directive(
    selector: '[two]'
)
export class DirectiveTwo  

执行此操作时,我收到标准“无法绑定到‘两个’,因为它不是已知的本机属性”错误。

从另一个指令引用和使用一个指令的正确方法是什么?

【问题讨论】:

【参考方案1】:

指令仅由 Angular 实例化,用于匹配静态添加的 html(元素、id、属性、类...)的选择器。 无法使用@Component()@Directive() 装饰器的host 参数来实例化指令。也无法使用ViewContainerRef.createComponent()(前DynamicComponentLoader)动态创建指令

支持获取对另一个指令的引用,该指令由 Angular 实例化,因为在同一元素上静态添加了 HTML。

【讨论】:

如果是这样,让一个指令扩展或使用其他指令的功能的最佳做法是什么?这似乎是一个非常重要的限制。 我认为这是一个更大的更新主题github.com/angular/angular/issues/11606

以上是关于在另一个指令的宿主中使用指令的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2:指令和宿主组件之间的通信

Angular 结构指令:用另一个组件包装宿主元素

如何在另一个组件中获取指令/组件实例?

在另一个模块使用此属性之前,如何使用指令添加属性?

Docker-端口映射

使用指令将类添加到宿主元素[重复]