要分享Observable for multiple observers,您需要类似share
运算符。
示例:
import {Observable} from 'rxjs';
import {share} from 'rxjs/operators'
export class dataService{
public data$=Observable<Idata[]>
constructor(http:HttpClient)
{
this.data$=this.http.get<Idata[]>('https://jsonplaceholder.typicode.com/posts').pipe(share());
}
public getPosts():Observable<Idata[]>
{
return this.data$
}}
此运算符是 publish 的特化,它创建一个
当观察者的数量从零变为一时订阅,然后
与所有后续观察者共享该订阅,直到
观察者数量归零,此时订阅
被处置。
Refer this for more
由于您想在导航到新路线之前获取已解析的数据,您可以使用Resolveguard
在路由激活之前执行路由数据检索。
您可以使用 ActivatedRoute’s snapshot 对象的 data 属性访问解析的数据或订阅 ActivatedRoute data 属性当前路由的静态和解析数据
resolve.service.ts:
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import {Observable} from 'rxjs';
@Injectable()
export class resolver implements Resolve<Observable<any>> {
constructor(private service:Service) {}
resolve() {
return this.dataService.getdata();
}
}
routes.module.ts:
{
path: 'home',
component: HomeComponent,
resolve: {
data: resolver,
},
},
.component.ts:,
constructor( private route:ActivatedRoute) {
this.route.data.subscribe(value=>{
console.log(value);
});}
STACKBLITZ DEMO
参考
1. fetch-data-before-navigating
- Route Resolvers