我正在使用角度rc2,并对路线解除警卫有疑问。
这是我的解决服务。它工作正常。
import { Injectable } from '@angular/core';
import { Router, Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { ApiService } from '../api_service/api.service';
import 'rxjs/add/operator/take';
import { BasicSetup } from './basic_setup'
@Injectable()
export class BasicSetupResolve implements Resolve<any> {
constructor(private _apiService: ApiService, private router: Router) {}
resolve(route: ActivatedRouteSnapshot): Observable<any> | Promise<any> | any {
let id = route.params['id'];
let model_id = id;
let endpoint='/test/model/basic';
return new Promise((resolve) => { this._apiService.getModel(endpoint,model_id,false).subscribe(api_object => {
if (api_object) {
return resolve(api_object);
} else { // id not found
this.router.navigateByUrl('/dashboard(content:models/basic/' + model_id +')');
return false;
}
});
});
}
}
这是我的app.route.ts
{ path: 'models/basic/:id', component: mesaBasicComponent,canActivate: [AuthGuard], resolve: {results: BasicSetupResolve},outlet:'content' },
我需要传递一个变量以使其更具动态性,因为通过端点更改,我必须为每个端点创建单独的服务:
let endpoint='/test/model/basic';
我如何将其传递给服务?
答案 0 :(得分:3)
您可以将数据传递给解析器:
路线配置中的:
{
path: 'your-path',
component: YourComponent,
data: {
someKey: 'someValue',
},
resolve: {
someKey: YourResolver
},
}
在你的解析器中
@Injectable()
export class YourResolver implements Resolve<any> {
// ...
resolve(route:ActivatedRouteSnapshot):Observable<any> | Promise<any> | any {
console.log(route.data['someKey']);
// ...
}
}