如果服務和組件之間的交互可能是一個例子:
服務:
@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);
}
}
的Component1(發送者):
export class SomeComponent {
public data: Array<any> = MyData;
public constructor(private myService: MyService) {
this.myService.myMethod(this.data);
}
}
COMPONENT2(接收器):
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()
返回的結果。
服務構造已經被你注入到你的組件的運行時間 - 因爲你不初始化,'data'在該時間不確定。 –
之前,你可以調用對象的方法上,它必須被構建。因此你的構造函數被調用並且數據是未定義的。然後,您訪問該成員並修改該變量,但構造函數已被調用。 – Akkusativobjekt
我該如何解決這個問題? – TeodorKolev