我知道我应该使用Observable来创建这种行为。但不确定究竟该怎么做。
serviceA.service.ts
private tobeUpdated: Observable<any>;
constructor( private serviceB: serviceB){}
// Whenever any change happens in function B of serviceB, call this function
this.tobeUpdated = this.serviceB.B();
this.tobeUpdated.subscribe((data) => {
//do my operations
})
serviceB.service.ts
private message:[];
B(){
message.push("I updated this variable");
// Now i need to pass this message to service A
return message;
}
现在,无论何时在服务B中更新功能B,如何更新serviceA中的“tobeUpdated”变量。
每次调用函数B时都应该更新。
我是棱角分明的新人,我们将不胜感激。
提前致谢!
答案 0 :(得分:1)
使用主题。
主题如果您不想保留第一个值, BehaviorSubject 如果您需要第一个值。
// Either of them but not both, duh
toUpdate: Subject<any> = new Subject();
toUpdate: BehaviorSubject<any> = new BehaviorSubject(null);
B() {
this.toUpdate.next('Your message or your array of messages');
}
constructor(B: serviceB) {
B.toUpdate.subscribe(message => {
// Your operations
});
}
答案 1 :(得分:1)
你可以通过以下方式做到:
在serviceB的构造函数中创建/注入serviceA。
使用步骤2中获取的对象,调用适当的方法(toBeUpdated of serviceA)。
我看不到你的实际课程名称,但第3步和第4步可以如下。这假设toBeUpdated不是私有的
constructor(private objserviceA :
ServiceA) { }
// step 4 below
this.objserviceA.toBeUpdated =xyz
在本教程中,他们将MessageService注入HeroService。
答案 2 :(得分:1)
您应该使用主题并订阅它。还要记得取消订阅。
这可能是一个例子
从&#39; rxjs&#39;;
导入{Observable}import {Subject} from 'rxjs';
import {Subscription} from 'rxjs';
export class ClassA {
private tobeUpdated: Observable<string>;
private subscription: Subscription;
constructor( private serviceB: ServiceB){
this.tobeUpdated = this.serviceB.B();
this.subscription = this.tobeUpdated.subscribe(data => {
//do my operations
console.log('the messagge received is ', data);
})
}
stop() {
this.subscription.unsubscribe();
}
}
class ServiceB {
private message$: Subject<string> = new Subject<string>();
emitMessagge(message: string) {
this.message$.next(message);
}
B() {
return this.message$.asObservable();
}
}
const B = new ServiceB();
const A = new ClassA(B);
B.emitMessagge('first');
B.emitMessagge('second');
B.emitMessagge('third');
A.stop();