Ionic 从父组件访问子组件html元素

dm7nw8vv  于 2023-10-14  发布在  Ionic
关注(0)|答案(1)|浏览(129)
  • attendees.component.html*(父)
<app-add-guest (guestUserChange)="addGuest($event)"></app-add-guest>
  • add-guest.component.html *(子)
<form [formGroup]="form">
  <ion-row>
    <ion-col>
      <ion-item>
        <ion-label position="stacked" color="light">Guest name</ion-label
        >

        <ion-input // this input here
          formControlName="guestName"
          color="light"
          type="text"
          placeholder="Guest name"
       >
        </ion-input>
      </ion-item>
    </ion-col>
  </ion-row>
</form>

你能告诉我如何从父组件访问ion-input吗?因为我需要在父组件中的输入上设置焦点。
我看到了很多如何使用@ViewChild访问子组件方法的示例。但不是我上面的用例。

d7v8vwbk

d7v8vwbk1#

如果我们遵循适当的关注点分离,父级不应该知道任何关于子级模板的信息。向子级添加一个方法,该方法关注输入,并让父级在适当的时候调用此方法。

@Component({
    /* ... */
    selector: 'app-add-guest',
    template: `
        <!-- ... -->
        <ion-input // this input here
          formControlName="guestName"
          color="light"
          type="text"
          placeholder="Guest name"
        >
        <!-- ... -->
    `,
})
export class AddGuestComponent {
  @ViewChild(IonInput) guestNameInput?: IonInput;

  focusInput(): void {
    this.guestNameInput?.setFocus();
  }
}

@Component({
    /* ... */
    template: `<app-add-guest></app-add-guest>`,
})
export class AttendeesComponent implements AfterViewInit {
  @ViewChild(AddGuestComponent) child?: AddGuestComponent;

  ngAfterViewInit(): void {
    this.child?.focusInput();
  }
}

相关问题