我有這樣一個角度組件:RxJS,Angular:無法接收其他方法的訂閱結果
它創建一個正常的ReplaySubject。 (見constructor
)。 然後一些其他組件通過方法getSubject()
獲得subject
並訂閱它。另一個組件通過setValue
設置新值。這個值應該被訂戶接收。但是,這不會發生。它什麼也收不到,甚至沒有錯誤。
@Injectable()
export class BreadcrumbService {
subject: ReplaySubject<string>;
constructor() {
this.subject = new ReplaySubject<string>();
console.log('Step 1: Subject created');
}
getSubject(): ReplaySubject<string> {
console.log('Step 2: Return subject for subscribing');
return this.subject;
}
setValue(title: string) {
console.log('Step 3: Invoke a new value which should be received in the Subscriber of step 2.');
this.subject.next(title);
}
}
如果我將訂閱放在setValue()
之內,它就會按預期工作。
這裏是我的組件應該接收訂閱:
export class BreadcrumbComponent implements OnInit {
constructor(
private breadcrumbsService: BreadcrumbService
) {}
ngOnInit() {
this.breadcrumbsService.getSubject()
.subscribe(
success => {
console.log(success); // is never called
},
error => {
console.log(error); // is never called
}
);
}
}
我的用戶如何獲得這個價值?
你檢查了@Gunter的說法嗎?除了一切應該沒有任何錯誤的工作。 – micronyks