技術

【Angular6】Angularで子コンポーネントから親コンポーネントのメソッドを呼び出す

投稿日:

Angularでアプリを作っている時、子コンポーネントから親コンポーネントのメソッドを呼びたい時があります。
呼びたい時は子コンポーネント側でOutputとEventEmitterを@angular/coreからimportする必要があります。

// 子コンポーネント
import { Component, OnInit, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'app-child',
templateUrl: '<div (click)="say()">test</div>'
})

export class ChildComponent implements OnInit{
@Output() greeting = new EventEmitter();

say() {
this.greeting.emit();
}
}

// 親コンポーネント
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-parent,
templateUrl: '<app-child (greeting)="sayHello()"></child>'
})

export class ParentComponent implements OnInit{

sayHello() {
console.log("Hello");
}
}

// 実行結果
// "Hello"

これでコンポーネントから親コンポーネントのメソッドを呼び出せるようになりましたが、
子コンポーネントから親コンポーネントに変数を渡したい時もあります。

// 子コンポーネント
import { Component, OnInit, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'app-child',
templateUrl: '<div (click)="say()">test</div>'
})

export class ChildComponent implements OnInit{
@Output() greeting = new EventEmitter();

say() {
this.greeting.emit("こんにちは");
}
}

// 親コンポーネント
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-parent,
templateUrl: '<app-child (greeting)="sayHello($event)"></child>'
})

export class ParentComponent implements OnInit{

sayHello(text) {
console.log(text);
}
}

// 実行結果
// "こんにちは"

emitの引数は$eventで受け取れます。

これでコンポーネントから親コンポーネントに引数を渡して、メソッドを呼ぶことができました。

-技術

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

[SSL] let’s encryptの更新でエラー?!

どうも中田です。 無料でSSL証明書が取得できる今日この頃、いかがお過ごしでしょ …

[Rails]遷移元のURLを表示する方法

こんにちは。たなかです。 「このページから遷移してきた時は、こう処理したい」みた …

no image

【AngularJS】 $on, $emit, $broadcast

どうも、なかたです。 AngularJSのコントローラー(スコープ)間のデータや …

Ionicアプリのアイコンやスプラッシュ画像を変更したい!

こんにちは。田中です。 現在Ionicを使ったアプリ開発に携わっているのですが、 …

[ Ionic ]キーボード出現時にフッターを押し上げてしまう問題の対応

こんにちは。たなかです。 IonicFrameworkでモバイルアプリを開発させ …