我是Angular 2/4的新手,所以请原谅我的无知。我有一个服务,我想注入各种组件,但此服务使用需要首先从服务器检索的元数据。我想知道在服务注入组件之前是否有办法确保服务数据得到解决。
我读了一些关于路线防护的内容,听起来与我正在寻找的类似,但我认为这不适用于我的问题,因为服务本身并没有路线。 / p>
答案 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
}
]
}
]
谢谢......