我可以在每次加载组件时和一次将模块一起加载而无需两次请求时解析服务吗?

时间:2019-02-14 08:29:42

标签: angular frontend

我有模块,该模块在加载时是解析服务,并且在该模块中有很多组件,但是我想解析相同的服务每次加载 TrainingsComponent 时。因此,问题在于,如果我打开 TrainingsComponent ,这将是对服务的双重查询。 为模块下载服务很重要,因为组件中使用了该服务中的数据,而在TrainingsComponent中下载数据也很重要,因为我想每次每次都从服务中获取新数据。 那我该怎么办呢?

const routes: Routes = [
  {
    path: '',
    resolve: {
      setup: GamesListService, MissionsListService, TestService, EvolutionService
    },
    children: [
      {
        path: '',
        component: TrainingsComponent,
        resolve: {
          setup: GamesListService, MissionsListService, TestService
        },
      },
      {
        path: 'mission-study',
        component: MissionStudyComponent
      },
      {
        path: 'sphere/:sphereAlias',
        component: SingleSphereComponent
      }
    ]
  }
];

1 个答案:

答案 0 :(得分:1)

您应该考虑拆分服务。为要加载到模块上的数据创建单例服务,为每次加载请求时的数据创建另一个服务。如果您在那里有普通的东西,请将它们放在基类中并进行扩展。

另一种解决方案是不从服务端发出请求。

将该代码放入您的服务中

 export class ApiService {   
   private url = 'api/url';

   constructor(private http: HttpClient) {}

   load(): Observable<any> {
     return this.http.get<any>(`${this.url}`); }
   }
 }

代替:

 export class ApiService {   
   private url = 'api/url';

   constructor(private http: HttpClient) {}

   load(): Observable<any> {
     return this.http.get<any>(`${this.url}`).pipe(...); 
   }
 }