2017-05-16 110 views
1

退订我有以下服务,以适应在我的应用程序的全局微调:异步管道从ReplaySubject

import { 
 
    Injectable 
 
} from '@angular/core'; 
 
import { 
 
    Observable 
 
} from 'rxjs/Observable'; 
 
import { 
 
    ReplaySubject 
 
} from 'rxjs/ReplaySubject'; 
 

 
@Injectable() 
 
export class SpinnerService { 
 
    private visible = new ReplaySubject <boolean>(); 
 

 
    showSpinner() { 
 
    this.visible.next(true); 
 
    } 
 

 
    hideSpinner() { 
 
    this.visible.next(false); 
 
    } 
 

 
    getSpinnerVisibility(): Observable <boolean> { 
 
    return this.visible.asObservable(); 
 
    } 
 
}

然后将下面的正上方我router-outlet在我的主要应用程序组件:

<app-spinner *ngIf="spinnerService.getSpinnerVisibility() | async "></app-spinner>

问题是,如果th e async这里管道功能正常取消订阅没有内存泄漏从这个ReplaySubject或我必须手动取消订阅?

+3

异步管道会自动取消订阅。 – n00dl3

回答

2

从用户的角度来看,ReplaySubjectObservable之间绝对没有区别。当您使用async管道时,您不必退订观察窗,因此ReplaySubject的管道也是如此。

+0

谢谢。奇怪的是,目前,当我使用另一个组件的服务时,微调器并未按预期显示! – Sammy

+0

你如何在模块或组件内部声明你的服务? – n00dl3

+1

我认为这实际上应该有另一个问题: - )... – n00dl3