这是服务:
@Injectable()
export class AuthService {
public reset: Subject<any>;
constructor() {
this.reset = new Subject();
}
public logout() {
this.reset.next('logout');
}
}
这是另一项想知道logout()何时发生的服务:
@Injectable()
export class StoreService() {
constructor(private auth: AuthService) {
this.auth.changes.subscribe((value) => {
// Do not work God knows why
});
}
}
第二项服务中的订阅永远不会发生任何事件。为什么呢?
答案 0 :(得分:2)
我发现了问题 - 有多个AuthService实例(谢谢@Martin)。问题是如果有人添加:[AnyService]提供任何组件,将没有错误,但您将获得两个(或更多)服务实例。
通过将console.log(counter++)
添加到服务构造函数中,可以轻松找到此类错误。
答案 1 :(得分:1)
@Injectable()
export class AuthService {
public reset: Subject<any>;
reset$ = null;
constructor() {
this.reset = new Subject();
this.reset$ = this.reset.asObservable();
}
public logout() {
this.reset.next('logout');
}
}
其他消耗它的服务订阅该事件。
@Injectable()
export class StoreService() {
constructor(private auth: AuthService) {
this.auth.reset$.subscribe((value) => {
console.log(value);
//implement your own logic here
});
}
}
答案 2 :(得分:0)
您必须定义可在其他服务或组件中订阅的Observable字符串:
@Injectable()
export class AuthService {
public reset: Subject<any>;
/**
* Observable string streams
*/
notifyObservable$ = this.reset.asObservable();
constructor() {
this.reset = new Subject();
}
public logout() {
this.reset.next('logout');
}
}
// StorageService
@Injectable()
export class StoreService() {
constructor(private auth: AuthService) {
this.auth.notifyObservable$.subscribe((value) => {
// Do not work God knows why
});
}
}