私はAngularプロジェクトで学習/作業しています。たくさんのことをして、「正しい方法」でやろうとしているので、今やりたいことは次のとおりです。
子コンポーネントから親コンポーネントへの変数(出力)を取得したいのですが、出力を使用したくない、聞きたくない、親が必要なときにいつでも取得したい、child.getVariable()
childviewを使用する必要があるという投稿に出くわしましたが、質問は私のものと同じではなかったので、childviewを使用して子コンポーネントからデータを取得することをお勧めしますか?
子コンポーネントにEventEmitterを@Outputとして登録します。
@Output() onDatePicked: EventEmitter<any> = new EventEmitter<any>();
Emit value on click:
public pickDate(date: any): void {
this.onDatePicked.emit(date);
}
親コンポーネントのテンプレートでイベントをリッスンします。
<div>
<calendar (onDatePicked)="doSomething($event)"></calendar>
</div>
および親コンポーネント:
public doSomething(date: any):void {
console.log('Picked date: ', date);
}
子コンポーネントに同期的にアクセスする場合は、次のようにViewChildを使用することをお勧めします。
import { CountryCodesComponent } from '../../components/country-codes/country-codes.component';
import { Component, ViewChild } from '@angular/core';
@Component({
selector: 'signup',
templateUrl: "signup.html"
})
export class SignupPage {
@ViewChild(CountryCodesComponent)
countryCodes: CountryCodesComponent;
nationalPhoneNumber = '';
constructor() {}
get phoneNumber(): string {
return '+' + this.countryCodes.countryCode + this.nationalPhoneNumber;
}
}
親がAngularの子コンポーネントと通信する方法。
(i)子コンポーネントはEventEmitterプロパティを公開し、何かが発生したときにイベントを発行します。親はそのイベントプロパティにバインドし、それらのイベントに反応します。
(ii)親コンポーネントは、データバインディングを使用して、子プロパティを読み取ったり、子メソッドを呼び出したりすることはできません。子要素のテンプレート参照変数を作成してから、親テンプレート内でその変数を参照することで、両方を行うことができます。
(iii)ローカル変数アプローチは単純で簡単です。ただし、親子の配線は完全に親テンプレート内で行う必要があるため、制限があります。親コンポーネント自体は子にアクセスできません。
(iv)親と子はサービスを介して通信できます。
詳細な説明については、以下のリンクを参照してください。
親のテンプレート内から子コンポーネントの変数にアクセスするだけでよいですか?もしそうなら、あなたは使用することができます:
<child-component #childComponentRef></child-component>
その後、親テンプレート内から#childComponentRef.someVariableにアクセスできます。そうでなければ、Angularチームは共有サービスを推奨していると思います。とにかく、それらはもう少し用途が広いです。 https://angular.io/docs/ts/latest/cookbook/component-を参照してください。 communication.html#!#parent-and-children-communicate-via-a-service