【问题标题】:Angular: Passing an Observable to another serviceAngular:将 Observable 传递给另一个服务
【发布时间】:2017-11-29 11:09:14
【问题描述】:

我有一个服务“DataStorageService”,负责通过 HTTP 从 firebase 获取数据。它看起来像这样:

export class DataStorageService {

  private _data_source_url = "https://a******9.firebaseio.com/";

  constructor(private _http: Http) {}

  getUsers() {
    return this._http.get(this._data_source_url + "users.json")
      .map((response: Response) => {
        return response.json();
      });
  }

}

我正在使用另一个服务“UsersService”将此数据获取到用户数组中。它看起来像这样:

@Injectable()
export class UsersService{

  private _users: User[];
  public usersChanged = new Subject<User[]>();

  constructor(private _dataStorageService: DataStorageService) {}

  public getUsers(): User[] {
    this._dataStorageService.getUsers()
      .subscribe((users: User[]) => {
        this._users = users;
        this.usersChanged.next(users);
      });
    return this._users.slice();
  }

}

我正在尝试使用 UsersService 中的此 getUsers() 方法从组件访问数组。但是,我没有得到任何数据,我认为这是因为 getUsers 没有等待数据从订阅中返回,而是执行了当时没有任何内容的返回语句。但我想不出任何可以解决这个问题的解决方案。

我需要一些专家建议。另外,我做这样的任务的方法正确吗?

【问题讨论】:

    标签: javascript angular rxjs


    【解决方案1】:

    为什么不在你的组件中这样做?

    this.usersService.usersChanged.subscribe(users => {
    this.componentUserVariable = users
    })
    

    【讨论】:

    • 我必须在某个地方调用 getUsers 才能首先发出事件。另外,我正在尝试从函数中获取数据,我错了吗?
    • 你已经从你的服务中调用了 getUsers,你只需要在你的组件中订阅 usersChanged
    • 但是谁会调用 UsersService 的 getUsers 呢?
    • 兄弟,您可以在服务本身的构造函数中调用它,也可以在组件中订阅它之前调用它
    猜你喜欢
    • 2019-01-07
    • 1970-01-01
    • 2018-03-23
    • 2021-06-07
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2017-05-25
    • 2017-05-06
    相关资源
    最近更新 更多