Angular2에서 component1 (왼쪽 패널 탐색기로 사용)과 component2.이 두 구성 요소는 서로 관련이 없습니다 (형제, 부모 및 자식 ...) . 어떻게 component2에서 component1의 함수를 호출 할 수 있습니까? 여기서 이벤트 바인딩을 사용할 수 없습니다.다른 구성 요소의 구성 요소에서 함수를 호출합니다.
2
A
답변
2
공유 서비스는 비 관련 구성 요소 간의 일반적인 통신 방법입니다. 구성 요소는 use a single instance of the service이어야하므로 루트 수준에서 제공되는지 확인하십시오.
공유 서비스 :
@Injectable()
export class SharedService {
componentOneFn: Function;
constructor() { }
}
구성 요소 하나를
export class ComponentOne {
name: string = 'Component one';
constructor(private sharedService: SharedService) {
this.sharedService.componentOneFn = this.sayHello;
}
sayHello(callerName: string): void {
console.log(`Hello from ${this.name}. ${callerName} just called me!`);
}
}
구성 요소 2 :
export class ComponentTwo {
name: string = 'Component two';
constructor(private sharedService: SharedService) {
if(this.sharedService.componentOneFn) {
this.sharedService.componentOneFn(this.name);
// => Hello from Component one. Component two just called me!
}
}
}
이 게시물뿐만 아니라 도움이 될 수 있습니다 Angular 2 Interaction between components using a service
+0
2011 년 10 월 24 일까지 계속 작동합니까? 지정한대로 정확히 시도했지만 comp2에서 호출하면 comp1의 이름이 정의되지 않은 것으로 나타납니다. – overboard182
0
관련되지 않은 구성 요소와 통신하는 데 각도 BehaviorSubject를 사용할 수 있습니다.
서비스 파일
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class commonService {
private data = new BehaviorSubject('');
currentData = this.data.asObservable()
constructor() { }
updateMessage(item: any) {
this.data.next(item);
}
}
첫 번째 구성 요소
constructor(private _data: commonService) { }
shareData() {
this._data.updateMessage('pass this data');
}
두 번째 구성 요소
constructor(private _data: commonService) { }
ngOnInit() {
this._data.currentData.subscribe(currentData => this.invokeMyMethode())
}
abov를 사용하여 e 접근 방식을 사용하면 비 관련 구성 요소를 사용하여 데이터를 쉽게 공유하고 메서드를 호출 할 수 있습니다.
당신은 아마 해당 연결을 관리하는 [서비스] (https://angular.io/docs/ts/latest/tutorial/toh-pt4.html)를 사용하는 것입니다. – ryannjohnson
플럭스 패턴 사용 - 서비스는 이벤트의 디스패처이고 구성 요소는 가입자입니다. 구성 요소는 실제로 서로에 대해 알지 못합니다. 유용 할 수 있습니다. http://stackoverflow.com/questions/42219858/how-can-i-maintain-the-state-of-dialog-box-with-progress-all-over-my-angular-2-a/42221273 # 42221273 – pixelbits
@ryannjohnson (component1)에서 보간 {{total}}을 업데이트해야하고 즉시 왼쪽 패널에 표시해야합니다. 방금 서비스를 호출하면 어떻게이 변수를 업데이트 할 수 있습니까? –