私はAngularプロジェクトを学んでいます/取り組んでいます.私はたくさんのことをしてきました.「正しい方法」で物事をやろうとしています.
子コンポーネントから親コンポーネントへの変数 (出力) を取得したいが、出力を使用したくない、聞きたくない、親が必要なときにいつでも取得したい、child.getVariable()
のようなものchildview を使用する必要があるという 1 つの投稿に出くわしましたが、質問は私のものと同じではありませんでした。
私はAngularプロジェクトを学んでいます/取り組んでいます.私はたくさんのことをしてきました.「正しい方法」で物事をやろうとしています.
子コンポーネントから親コンポーネントへの変数 (出力) を取得したいが、出力を使用したくない、聞きたくない、親が必要なときにいつでも取得したい、child.getVariable()
のようなものchildview を使用する必要があるという 1 つの投稿に出くわしましたが、質問は私のものと同じではありませんでした。
親のテンプレート内から子コンポーネントの変数へのアクセスのみが必要ですか? その場合は、次を使用できます。
<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を参照してください
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);
}
親が Angular で子コンポーネントと通信する方法。
(i) 子コンポーネントは、何かが発生したときにイベントを発行するEventEmitterプロパティを公開します。親はそのイベント プロパティにバインドし、それらのイベントに反応します。
(ii) 親コンポーネントは、データ バインディングを使用して子プロパティを読み取ったり、子メソッドを呼び出したりすることはできません。子要素のテンプレート参照変数を作成し、親テンプレート内でその変数を参照することで、両方を行うことができます
(iii) ローカル変数のアプローチはシンプルで簡単です。ただし、親子のワイヤリングは完全に親テンプレート内で行う必要があるため、制限があります。親コンポーネント自体は子にアクセスできません。
(iv) 親と子は、サービスを介して通信できます。
詳細な説明については、以下のリンクを参照してください。
子コンポーネントに同期的にアクセスする場合は、次のように 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;
}
}