web-dev-qa-db-ja.com

resolveメソッドのパラメーターを持つ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
   }
}

現在、myOptionはハードコードされた文字列であり、変更したい

私のルーティングモジュールには次のものがあります。

resolve: {
  myResolver: AppResolver
}

ここでmyOption文字列の値を指定する必要があると思いますが、どのようにしたらよいでしょうか。

または、実際にリゾルバーと呼んでいる場所

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

パラメータは必ずしもブラウザに表示されるとは限りません:

これはURLの一部になります:/.../.../ myString /。

しかし、それはparamによって導入されていません:url:/..& myParam = paramValue

そのため、myParamを使用してURLから識別し、置き換えることはできません

6
annepic

dataresolverに送信する例を次に示します。

ルート構成:

{
  path: 'project/:id',
  component: ProjectComponent,
  resolve: { data: AppResolver },
  data: { resolvedata: 'myValue' }
}

リゾルバー:

@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); 
  } 
}
7
Sravan