Vla*_*274 5 angular-directive angular2-directives angular
假设我有两个指令:
@Directive({
selector: '[appDirective1]'
})
export class Directive1Directive {
public alone = true;
constructor(private element: ElementRef<HTMLInputElement>) { }
ngOnInit() {
if (this.alone) {
this.element.nativeElement.innerHTML = "I am alone";
} else {
this.element.nativeElement.innerHTML = "I have a friend";
}
}
}
@Directive({
selector: '[appDirective2]'
})
export class Directive2Directive {
constructor() { }
}
Run Code Online (Sandbox Code Playgroud)
Directive1如果Directive2存在于同一元素上,我想更改其行为。例如,这些应该有不同的行为。
<div appDirective1></div>
<div appDirective1 appDirective2></div>
Run Code Online (Sandbox Code Playgroud)
我是否可以在不添加服务以促进通信的情况下执行此操作*?
StackBlitz 示例:https ://stackblitz.com/edit/angular-bgqd15
*我想避免为此创建新服务,因为这感觉有点矫枉过正。
您可以使用Host()装饰器通过构造函数注入相邻指令,并使其成为Optional()
constructor(@Optional() @Host() public friend: Directive2Directive) { }
ngOnInit() {
if (this.friend) {
this.element.nativeElement.innerHTML = "I have a friend";
} else {
this.element.nativeElement.innerHTML = "I am alone";
}
}
Run Code Online (Sandbox Code Playgroud)
组件、指令和提供程序是可注入的,您可以将 DI 限制为仅在当前主机级别进行搜索。
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |