2016-10-11 67 views
0

这里是我们的服务:角2 - 订阅服务主题属性没有捕获事件

@Injectable() 
export class AuthService { 

    public reset: Subject<any>; 

    constructor() { 
    this.reset = new Subject(); 
    } 

    public logout() { 
    this.reset.next('logout'); 
    } 
} 

这是想知道什么时候退出()发生的另一项服务:

@Injectable() 
export class StoreService() { 

    constructor(private auth: AuthService) { 

    this.auth.changes.subscribe((value) => { 
     // Do not work God knows why 
    }); 
    } 
} 

认购中第二个服务将永远不会得到任何事件。为什么?

+0

对不起,auth.changes只是一个getter,它返回重置属性 –

+0

您还可以显示如何创建'changes' getter(或其它什么)? – martin

+0

@Martin是的,当然,这里是: 'public get changes(){ return this.reset; (){ }' 这一个我也试过: 'public get changes(){ return this.reset.asObservable(); }' –

回答

0

你必须定义可观察到的字符串,你可以在其他服务或组件订阅:

@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 
    }); 
    } 
} 
+0

感谢您的回答,但主题已经返回Observable,为什么我必须打电话asObservable()在Observable上?无论如何,它仍然无法正常工作 –

+0

你有什么错误吗? – ranakrunal9

+0

你可以检查答案http://stackoverflow.com/questions/39738974/can-i-emmit-the-event-from-parent-to-child-in-angular2/39739184#39739184供您参考 – ranakrunal9

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 
    }); 
    } 
} 
+0

这实际上是我正在寻找的。Thx! – Tawani

2

我发现问题 - 有多个AuthService实例(谢谢@Martin)。问题是,如果有人向任何组件提供:[AnyService],则不会有错误,但您将获得两个(或更多)服务实例。 通过将console.log(counter++)添加到服务构造函数中,可以轻松找到此类错误。