模板
<div my-directive></div>
指令
constructor(vc: ViewContainerRef, el: ElementRef, svc: MyService) {}
useService() {
this.svc.doWork(vc, el);
}
因此该服务既需要ViewContainerRef
也需要ElementRef
。我是否都必须通过?有没有一种方法可以从元素ref派生视图容器?如果是这样,我只需要将ElementRef
传递给服务,它将从中获取视图容器。
或者,ElementRef
可以从ViewContainerRef
派生吗?因为我假设一个视图容器可以包含多个元素,所以这似乎是不可能的。
答案 0 :(得分:2)
您可以从视图中使用元素引用。它们都引用相同的DOM元素。
constructor(vc: ViewContainerRef, el: ElementRef, svc: MyService) {
console.log(vc.element.nativeElement === el.nativeElement);
// prints true
this.svc.doWork(vc, vc.element);
}