简单的状态服务有害复杂

时间:2017-04-06 13:15:03

标签: angular typescript

我尝试创建一个简单的服务来管理我的应用程序中的单个状态:加载程序的可见性。

一些组件将发出更改,主要布局组件将订阅它以监视布尔更改。然后由简单的ngIf处理。

以下是代码:

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

@Injectable()
export class AppLoaderService {
  private isLoaderVisible = new Subject<boolean>();

  changeLoaderState = this.isLoaderVisible.asObservable();

  emitChange(state: any) {
    this.isLoaderVisible.next(state);
  }

}

创建这种简单服务的方法是否为简单的切换器带来了太多的复杂性?

在我的情况下使用SubjectBehaviorSubject是否相关?我发现了一些有关在我们想要发出此类更改或设置时需要使用它们的信息服务初始化的默认值(BehaviorSubject)。

但也许这里有一个简单的Observable就足够了,但是如何应对价值变化呢?

2 个答案:

答案 0 :(得分:1)

如果你所服务的只是一个简单的*ngIf,我认为SubjectObservable没用。您可以使用简单的boolean值作为服务的属性。也许是一个getter和一个setter,但是如果你没有必须对可见性变化作出反应的依赖,我不会让Observables变得那么复杂。

答案 1 :(得分:1)

如果你想要的只是显示一个加载器,你可以直接使用一个布尔值,它更简单。

public isLoaderVisible:boolean=false;

让我们在你的component.ts

中说
 export class AppComponent {
  constructor(
    private loaderService: AppLoaderService 
  ){}
...

并在您的component.html中

<div *ngIf="loaderService.isLoaderVisible">
  <!-- do something here -->