有没有办法在Angular 4服务注入组件之前解析数据?

时间:2017-11-26 23:03:55

标签: angular

我是Angular 2/4的新手,所以请原谅我的无知。我有一个服务,我想注入各种组件,但此服务使用需要首先从服务器检索的元数据。我想知道在服务注入组件之前是否有办法确保服务数据得到解决。

我读了一些关于路线防护的内容,听起来与我正在寻找的类似,但我认为这不适用于我的问题,因为服务本身并没有路线。 / p>

1 个答案:

答案 0 :(得分:0)

Angular 2/4中的Resolve用于在激活路径和组件之前获取数据。

UserResolve服务从服务器获取数据。

import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot} from '@angular/router';
import { UserService } from '../services/user.service';

@Injectable()
export class UserResolve implements Resolve<any> {

  constructor(private service: UserService) {}

  resolve(route: ActivatedRouteSnapshot) {
    return this.service.getUser().then(user => user);
  }

}

注意:导入&#34; UserResolve&#34;在您的模块中并在提供程序中使用它(如下所示)。

.......
import { UserService } from '../services/user.service';
import { UserResolve } from './user.resolve';

@NgModule({
  imports: [ ... ],
  declarations: [HomeComponent, AboutComponent, AboutUserComponent],
  providers: [UserService, UserResolve]
})
export class UserModule {  }

在路由器模块中使用它在组件加载之前调用服务(解析数据)。

 const aboutRoutes: Routes = [
      {
        path: '',
        component: HomeComponent,
        children: [
          {
            path: '',
            component: AboutComponent,
            resolve: {
              user: UserResolve
            }
          },
          {
            path: 'user',
            component: AboutUserComponent
          }
        ]
     }
]

谢谢......