Angular 指令查询兄弟 HTML

Angular directive query sibling HTML

Using Angular 10 我想查询一个兄弟元素。基本上我有这样的东西:

<label myDirective for="foo" ...
<input id="foo" formControlName="xyz" ...

myDirective 中,我可以通过 @HostBinding 轻松获得 for 的值。然后在我的指令中,我想获取具有给定 ID 的元素的 formControlName。我不确定该怎么做,因为看起来我的指令可能 运行 在创建输入元素之前,例如。

我正在尝试自动化一点,所以我不必写这个:

<label [myDirective]="foo.attributes.getNamedItem('formControlName').value" ...
<html #foo ...

您可以在指令代码中创建一个 @Input()。您的指令:

  @Input() for;

  ngOnChanges() {
    if (!!this.for) {
      console.log(this.for.attributes.formcontrolname.nodeValue); // name
    }
  }

您的 HTML 代码:

<form [formGroup]="form">
  <div appDirective [for]="any"> 
  <input #any formControlName="name">
  </div>
</form>

这样你就有了你要求的 formControlName 属性。为了获得它的价值,我没有看到不输入表格的方法。或者您可以访问 this.for.value。但是你必须小心,因为这将采用原生元素输入值。