如何处理只有在observable已解析后才具有值的类属性?

时间:2017-10-29 16:40:59

标签: angular typescript

这是我在使用angular2 +时遇到的一个常见问题。我的服务中有一个属性,只有在构造函数中定义的可观察对象被解析后才会为其分配值(例如,下面的http调用)。我可以将observable分配给属性本身,并在其他组件(1)中订阅该属性,或者我可以在.subscribe调用(2)中为该属性赋值。

(1)

@Injectable()
export class UserService {
  public property;
  constructor(private http: Http) {
    this.property = this.http.get(url).map((res) => res.json());
  }
}

(2)

@Injectable()
export class UserService {
  public property;
  constructor(private http: Http) {
    this.http.get(url).subscribe(
      (value) => this.property = value.json()
    )
  }
}

问题在于,在情况(2)中,我无法弄清楚如何处理使用该服务的其他组件中的属性,因为给定了observable的异步性质,它总是解析为undefined 。我不关心在模板中处理它,而是在TS代码中处理它。

我不能总是使用case(1),因为有时我需要将响应分配给多个值。

1 个答案:

答案 0 :(得分:1)

所以我认为你的问题是你的组件会触发你的服务来发出请求。然后其他组件也需要该信息。如果使用单独的Observable,则可以为该属性创建getter和setter。以下是我的应用https://github.com/JanneHarju/MultiSourcePlayList/blob/master/angular2App/app/services/playlist.service.ts中的例子。 检查我的组件如何使用getPlaylistsModified()以及Service本身如何使用setter funktion。