如何刷新订阅者

时间:2018-02-07 02:17:40

标签: angular

在ngInit上我创建了这样的订阅者:

ngOnInit() {
    this.myService.getData(param1)
        .subscribe(data => {
            this.data = data;
        })
    );
}

那么如果我需要使用例如,我该如何刷新getData()中的param2? 即用户单击按钮并获取param2的数据。我认为我不需要取消订阅然后再订阅。还有其他可行的刷新方法吗?对于虚拟问题我很抱歉,我是Angular的新手。感谢

2 个答案:

答案 0 :(得分:0)

看起来getData是一个函数,不确定它是否返回一个observable

但是,如果您订阅服务中的可观察对象,请说 (在你服务范围内)

data: string[] = []
listChanged = new Subject<string[]>

(在您的组件内)

this.myService.listChanged
 .subscribe(data => { this.data = data})

然后每次有些组件更新它 (在你服务范围内)

addDate() {
 data.push('some string');
 listChanged.next(this.data);
}

您可以对主题使用.next方法,使所有订阅者在其回调函数中获取新数据

答案 1 :(得分:0)

@Iancovici解决方案的另一种方法是使用BehaviorSubject

以下是创建服务的方法。

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

@Injectable()
export class myService {
  private userData = new BehaviorSubject<Object>({}); //user proper datatype
  getData= this.userData.asObservable();

  constructor() { }

  changeUserData(userData: any) {
    this.userData.next(userData);
  }
}

在按钮调用的onClick()methis中:

changeUserData(userData);