1. ホーム
  2. アンギュラー

[解決済み】親クラスから子コンポーネントのメソッドを呼び出す - Angular

2022-04-07 03:41:22

質問

子コンポーネントを作成し、その子コンポーネントに呼び出したいメソッドがあります。

このメソッドを呼び出すと console.log() 行を設定しません。 test というプロパティがあるのですか?

以下は、私が変更を加えたクイックスタートAngularアプリです。

import { Component } from '@angular/core';
import { NotifyComponent }  from './notify.component';

@Component({
    selector: 'my-app',
    template:
    `
    <button (click)="submit()">Call Child Component Method</button>
    `
})
export class AppComponent {
    private notify: NotifyComponent;

    constructor() { 
      this.notify = new NotifyComponent();
    }

    submit(): void {
        // execute child component method
        notify.callMethod();
    }
}

子供

import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'notify',
    template: '<h3>Notify {{test}}</h3>'
})
export class NotifyComponent implements OnInit {
   test:string; 
   constructor() { }

    ngOnInit() { }

    callMethod(): void {
        console.log('successfully executed.');
        this.test = 'Me';
    }
}

を設定するにはどうすればよいのでしょうか? test プロパティも必要ですか?

どのように解決するのですか?

を使用することで可能です。 @ViewChild 詳しくはこちらをご覧ください。 リンク

<ブロッククオート

タイプセレクタ付き

子コンポーネント

@Component({
  selector: 'child-cmp',
  template: '<p>child</p>'
})
class ChildCmp {
  doSomething() {}
}

親コンポーネント

@Component({
  selector: 'some-cmp',
  template: '<child-cmp></child-cmp>',
  directives: [ChildCmp]
})
class SomeCmp {

  @ViewChild(ChildCmp) child:ChildCmp;

  ngAfterViewInit() {
    // child is set
    this.child.doSomething();
  }
}

文字列セレクタ付き

子コンポーネント

@Component({
  selector: 'child-cmp',
  template: '<p>child</p>'
})
class ChildCmp {
  doSomething() {}
}

親コンポーネント

@Component({
  selector: 'some-cmp',
  template: '<child-cmp #child></child-cmp>',
  directives: [ChildCmp]
})
class SomeCmp {

  @ViewChild('child') child:ChildCmp;

  ngAfterViewInit() {
    // child is set
    this.child.doSomething();
  }
}