重新初始化一个 Observable 对象
Reinitializing an Observable object
我希望能够重新初始化一个 Observable 对象。
我不知道“重新初始化”是否是正确的术语,但我的意思是我想刷新数据
- 无需创建新的 Observable 对象,并且
- 无需创建新订阅(对现有 Observable 对象的现有订阅应该可以无缝工作)
@Injectable({
providedIn: 'root',
})
export class MyService {
private url = 'http://mydummydomain.com/api/entries';
private data$: Observable<any>;
constructor(private http: HttpClient) {
this.data$ = this.http.get(this.url).pipe(
shareReplay(1)
);
}
getData(): Observable<any> {
return this.data$;
}
reloadData() {
// TODO:
// Refresh data from the url
// Theoretically this should be a function with no input parameters and no return value
}
}
谢谢
试试这个
refresh$ = new Subject<void>();
data$ = this.refresh$.pipe(startWith(null), switchMap(() => this.http.get(this.url)), shareReplay(1));
reloadData() {
refresh$.next();
}
我认为 BehaivorSubject 可以在不创建新的 observable 的情况下解决您的问题,但我建议使用 ngrx 或 mobx 来处理数据,这样更方便。我不明白为什么您将数据设置为私有并创建 getter?对视图中的变量使用 public 的正常做法。
@Injectable({
providedIn: 'root',
})
export class MyService {
private url = 'http://mydummydomain.com/api/entries';
public data$: BehaviorSubject<any> = new BehaviorSubject(null);
constructor(private http: HttpClient) {
this.http.get(this.url).pipe(
take(1)
).subscribe((data) => {
this.data$.next(data);
});
}
reloadData() {
this.http.get(this.url).pipe(
take(1)
).subscribe((data) => {
this.data$.next(data);
});
}
}
最好把你的逻辑API移到服务上,你可以在几个组件中使用数据,当数据存储在一个地方时,你可以更有效地使用它。
我希望能够重新初始化一个 Observable 对象。 我不知道“重新初始化”是否是正确的术语,但我的意思是我想刷新数据
- 无需创建新的 Observable 对象,并且
- 无需创建新订阅(对现有 Observable 对象的现有订阅应该可以无缝工作)
@Injectable({
providedIn: 'root',
})
export class MyService {
private url = 'http://mydummydomain.com/api/entries';
private data$: Observable<any>;
constructor(private http: HttpClient) {
this.data$ = this.http.get(this.url).pipe(
shareReplay(1)
);
}
getData(): Observable<any> {
return this.data$;
}
reloadData() {
// TODO:
// Refresh data from the url
// Theoretically this should be a function with no input parameters and no return value
}
}
谢谢
试试这个
refresh$ = new Subject<void>();
data$ = this.refresh$.pipe(startWith(null), switchMap(() => this.http.get(this.url)), shareReplay(1));
reloadData() {
refresh$.next();
}
我认为 BehaivorSubject 可以在不创建新的 observable 的情况下解决您的问题,但我建议使用 ngrx 或 mobx 来处理数据,这样更方便。我不明白为什么您将数据设置为私有并创建 getter?对视图中的变量使用 public 的正常做法。
@Injectable({
providedIn: 'root',
})
export class MyService {
private url = 'http://mydummydomain.com/api/entries';
public data$: BehaviorSubject<any> = new BehaviorSubject(null);
constructor(private http: HttpClient) {
this.http.get(this.url).pipe(
take(1)
).subscribe((data) => {
this.data$.next(data);
});
}
reloadData() {
this.http.get(this.url).pipe(
take(1)
).subscribe((data) => {
this.data$.next(data);
});
}
}
最好把你的逻辑API移到服务上,你可以在几个组件中使用数据,当数据存储在一个地方时,你可以更有效地使用它。