解析器上带有参数的解析器

ann*_*pic 4 resolver angular

所以我在角度5中实现了一个解析器:

@Injectable()
    export class AppResolver implements Resolve<MyComplexObject []> {
        constructor(private myService: MyService) {

        }
        resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<MyComplexObject[]> {
            return this.myService.getMyApi(myOption); // my option is a string
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,myOption是一个硬编码的字符串,我想更改它

在我的路由模块中,我有:

resolve: {
        myResolver: AppResolver
      }
Run Code Online (Sandbox Code Playgroud)

我想也许在这里我应该指定myOption字符串的值,但是如何?

或更好的地方,我实际上称为解析器

this.route.data.map(data => data.myResolver).subscribe(
      result => {
        // do something with the result (specify who the myOption is?? How)
    });
Run Code Online (Sandbox Code Playgroud)

该参数不一定在浏览器中可见:

它将是网址的一部分:/.../.../myString/ ..

但是它不是由param引入的:url:/..&myParam=paramValue

所以我不能使用myParam从网址中识别它并替换它

Sra*_*van 6

这是发送data给的示例resolver

路由配置:

{
  path: 'project/:id',
  component: ProjectComponent,
  resolve: { data: AppResolver },
  data: { resolvedata: 'myValue' }
}
Run Code Online (Sandbox Code Playgroud)

解析器:

@Injectable()
export class AppResolver implements Resolve<MyComplexObject []> { 
  constructor(private myService: MyService, private router: Router) {} 
  resolve(route: ActivatedRouteSnapshot): Observable<MyComplexObject[]>|boolean { 
    let myParam = route.data['resolvedata']; 
    console.log(myParam); 
  } 
}
Run Code Online (Sandbox Code Playgroud)