【问题标题】:resolver with parameter on resolve method带有参数的解析器解析方法
【发布时间】:2018-10-27 07:07:22
【问题描述】:

所以我在 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/..

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

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

【问题讨论】:

  • 你想为myOption设置哪个值
  • 所以它应该被动态分配给一个枚举值,因为我应该在多个地方使用相同的解析器(每次使用不同的解析参数)并且我不想复制解析器代码。我希望这有助于澄清
  • 是的,那么你可以通过data发送一个值,同时定义路由
  • 请教我如何做到这一点?
  • 是的,我正在添加代码

标签: angular resolver


【解决方案1】:

这里是发送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); 
  } 
}

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多