【发布时间】:2017-05-08 23:11:05
【问题描述】:
如何在主机中动态添加(inject)指令?
我有一个 myTooltip 指令,我想将 mdTooltip 指令添加到它的主机。我试过setAttribute() 或ElementRef.nativeElement,但它没有创建mdTooltip 指令。
mytooltip.directive.ts:
@Directive({
selector: '[my-tooltip]',
host: {
'(mouseenter)': 'show()',
'(mouseleave)': 'hide()',
}
})
export class myTooltip {
@Input('my-tooltip') message;
constructor() { }
show() {
/* TODO: How to add md-tooltip directive to elementref (host)? */
}
hide() {
/* TODO: remove md-tooltip directive from elementref (host) */
}
}
主机是指具有 myTooltip 指令的元素:
<span my-tooltip="tooltip hint">Click here</span>
结果在 html 之上不会改变,但在 mouseenter 上它会在 span 中有 md-tooltip 指令。
顺便说一句,我使用包装器而不是直接使用 md-tooltip 的原因是我想稍后修改显示延迟、隐藏延迟并以其他方式自定义材质工具提示的行为。
编辑显然目前不支持动态添加指令:(我认为这个问题应该仍然存在,以防材料团队更新
【问题讨论】:
-
你试过
constructor(private tt:myTooltip) { console.log(tt); }吗?不确定这是否有效。究竟什么是“主机”?<span>看起来不像一个组件。 -
当您在构造函数中请求提供者时,您正在谈论“注入”,但在这种情况下,我不是那个意思。我在这里注入的意思是有可能将指令插入到已经渲染的 dom 元素中,在这种情况下是 span。你可以像
<span md-tooltip="tooltip hint">Click here</span>那样在 html 中执行此操作,但现在我正在寻找一种编程方式。 -
这没有命名或与注入有关。目前不支持动态添加指令,只能动态添加组件。
-
是的,对于误导性命名,我们深表歉意。我将标题更改为更具描述性的内容。我还阅读了一些关于动态添加组件的内容,但这不适用于动态添加指令,感谢您提供的信息。
标签: angular typescript angular2-directives