在ngInit上我创建了这样的订阅者:
ngOnInit() {
this.myService.getData(param1)
.subscribe(data => {
this.data = data;
})
);
}
那么如果我需要使用例如,我该如何刷新getData()中的param2? 即用户单击按钮并获取param2的数据。我认为我不需要取消订阅然后再订阅。还有其他可行的刷新方法吗?对于虚拟问题我很抱歉,我是Angular的新手。感谢
答案 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);