서비스 구성 요소 간의 상호 작용을 할 수있는 경우의 예 :
서비스 :
@Injectable()
export class MyService {
myMethod$: Observable<any>;
private myMethodSubject = new Subject<any>();
constructor() {
this.myMethod$ = this.myMethodSubject.asObservable();
}
myMethod(data) {
console.log(data); // I have data! Let's return it so subscribers can use it!
// we can do stuff with data if we want
this.myMethodSubject.next(data);
}
}
컴포넌트 1 (송신기)
export class SomeComponent {
public data: Array<any> = MyData;
public constructor(private myService: MyService) {
this.myService.myMethod(this.data);
}
}
컴포넌트 2 (수신기) :
export class SomeComponent2 {
public data: Array<any> = MyData;
public constructor(private myService: MyService) {
this.myService.myMethod$.subscribe((data) => {
this.data = data; // And he have data here too!
}
);
}
}
설명 :
MyService
는 data
을 관리하고 있습니다. 원하는 경우 data
을 사용하여 계속 할 수 있지만 그 값을 Component2
으로 두는 것이 좋습니다.
기본적 MyService
는 Component1
에서 data
를 수신하고, 상기 방법 myMethod()
에 가입 누구에게 보낸다.
Component1
은 data
을 MyService
으로 보내고 그게 전부입니다. Component2
은 myMethod()
에 가입되어 있으므로 myMethod()
이 호출 될 때마다 Component2
은 (는) myMethod()
이 (가) 무엇이든 수신하고 수신합니다.
서비스 생성자는 구성 요소에 삽입 할 때 이미 실행되었습니다. 사용자가 초기화하지 않았으므로 '데이터'는 그 당시 정의되지 않았습니다. –
개체의 메서드를 호출하려면 먼저 개체를 생성해야합니다. 따라서 생성자가 호출되고 데이터는 정의되지 않습니다. 그런 다음 나중에 멤버에 액세스하여 변수를 수정하지만 생성자가 이미 호출되었습니다. – Akkusativobjekt
어떻게 해결할 수 있습니까? – TeodorKolev