実際のシナリオでは、単純な関数を呼び出すのではなく、適切な値を持つ関数を呼び出します。それでは、詳しく見ていきましょう。これがシナリオです。ユーザーは、自分のコンポーネントからイベントを発生させる必要があり、最後に別のコンポーネントの関数も呼び出したいと考えています。サービスファイルが両方のコンポーネントで同じであるとしましょう
componentOne.html
<button (click)="savePreviousWorkDetail()" data-dismiss="modal" class="btn submit-but" type="button">
Submit
</button>
ユーザーが送信ボタンをクリックすると、独自のコンポーネント componentOne.ts で savePreviousWorkDetail() を呼び出す必要があり、最後に別のコンポーネントの関数も呼び出す必要があります。そのため、サービス クラスの関数を componentOne.ts から呼び出すことができ、それが呼び出されると、componentTwo の関数が起動されます。
componentOne.ts
constructor(private httpservice: CommonServiceClass) {
}
savePreviousWorkDetail() {
// Things to be Executed in this function
this.httpservice.callMyMethod("Niroshan");
}
commontServiceClass.ts
import {Injectable,EventEmitter} from '@angular/core';
@Injectable()
export class CommonServiceClass{
invokeMyMethod = new EventEmitter();
constructor(private http: HttpClient) {
}
callMyMethod(params: any = 'Niroshan') {
this.invokeMyMethod.emit(params);
}
}
以下は、componentOneから呼び出す必要がある関数を持つcomponentTwoです。そして ngOnInit() では、呼び出されたメソッドをサブスクライブする必要があるため、メソッドがトリガーされると methodToBeCalled() が呼び出されます
componentTwo.ts
import {Observable,Subscription} from 'rxjs';
export class ComponentTwo implements OnInit {
constructor(private httpservice: CommonServiceClass) {
}
myMethodSubs: Subscription;
ngOnInit() {
this.myMethodSubs = this.httpservice.invokeMyMethod.subscribe(res => {
console.log(res);
this.methodToBeCalled();
});
methodToBeCalled(){
//what needs to done
}
}
}