小编KCa*_*lle的帖子

如何在queryParams更改时重新运行解析程序

我正在研究它好几天,但到目前为止还没有找到任何解决方案.

我有一个解析器服务,它应该返回一个Observable:

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) : Observable<any>|Promise<any>{
    return Observable.forkJoin(
         this.http.get(first call with queryParam),
         this.http.get(second call with queryParam),             
    );
}
Run Code Online (Sandbox Code Playgroud)

我订阅了组件中的ActivatedRoute数据,并且它运行良好.

但是,正如您在上面的代码中看到的,我的组件有一个queryParam,我的API调用依赖于这个queryParam.当我手动更改它时,它不会再次"解析"该路线.

我完全理解为什么,我阅读了文档.

有没有人有解决方法?在这种情况下,这甚至可以订阅params并返回一个Observable吗?

到目前为止我试过这个,但是它没有返回一个Observable,所以它什么也没做:

this.router.events.subscribe(event => { 
    if(event instanceof ResolveEnd){
      // My previous Observable.forkJoin
    }
});
Run Code Online (Sandbox Code Playgroud)

谢谢 :) !

----------- 解决方案(感谢Maximus): -----------

添加路由:

{
   path: 'some path',
   runGuardsAndResolvers: 'paramsOrQueryParamsChange'
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后,无需订阅路线事件或任何东西!魔法 !

observable typescript angular angular-router

15
推荐指数
1
解决办法
3938
查看次数

Angular 2:系统导入应用程序无法在没有文件扩展名的情

我对Angular和systemjs很新,但我会尝试尽可能更具体.

我正在使用angularjs2和打字稿.我使用tsconfig.json编译我的.ts文件.这是我的配置:

在此输入图像描述

接下来,我想使用systemjs通过index.html引导我的应用程序.但我的导入不接受没有扩展名的init(下面,我的init,实际上工作):

    System.config({
        transpiler: 'typescript'
    });
    System.import('src/app.ts');
Run Code Online (Sandbox Code Playgroud)

我被迫提到.ts扩展名(当我想导入手工制作的组件时,ts文件中的问题相同).
我忘记了什么吗?有关首次配置的初学者的文档有点粗略.
此外,我已经调用了所有脚本<head>(system.js,typescript.js,angular2.dev.js)

systemjs angular

7
推荐指数
2
解决办法
5519
查看次数