未检测到queryparam的更改

时间:2017-06-19 11:21:16

标签: javascript angular

我遇到了正确同步过滤器的问题。我subscribe queryParams ActivatedRoute。在那里,我得到query和我的三个过滤条件。

 ngOnInit() {
    this.route
      .queryParams
      .subscribe(queryParams => {
        this._query = queryParams['query'];
        this._heightFilter = queryParams['height'];
        this._colourFilter = queryParams['colour'];
        this._weightFilter = queryParams['weight'];
        // Do some request to WS to get the new data
      });
  }

如果我点击过滤器,请说colour:blue,我就会调用reloadPage()并提供新的queryparams并使用新的{{1}导航到同一页面}。

queryparams

这一切都很好。现在我们选择了 private reloadPage(): void { const queryParams: NavigationExtras = {}; queryParams['query'] = this._query; //Bring filter arrays into shape for queryParams this.prepareFiltersForParams(queryParams); this.router.navigate([], { queryParams, }); ,但我也想要colour:blue。我将添加到colour:orange,其中包含queryParams['colour']blue。但由于某些原因,orange被添加到网址中,即使它在orange中退出也是如此。如果我现在添加其他条件的过滤器,请说queryParams['colour'],一切都很顺利,height过滤器将被添加,height

在我看来,colour:orange的{​​{1}}只是没有接受change detection的更改,因此只是没有更新。

我还开了GH问题angular#17609

2 个答案:

答案 0 :(得分:1)

请参阅角度文档https://angular.io/guide/router#activatedroute-the-one-stop-shop-for-route-information

您可能需要使用switchmap运算符:

  

由于参数是作为Observable提供的,因此您可以使用switchMap运算符按名称为id参数提供它们,并告诉HeroService获取具有该id的英雄。

     

switchMap运算符允许您使用Observable的当前值执行操作,并将其映射到新的Observable。与许多rxjs运算符一样,switchMap处理Observable和Promise来检索它们发出的值。

     

如果用户在仍然检索英雄的同时重新导航到该路线,switchMap运营商也将取消任何正在进行的请求。

从英雄之旅(https://angular.io/tutorial/toh-pt5#revise-the-herodetailcomponent):

  

switchMap运算符将Observable路由参数中的id映射到新的Observable,即HeroService.getHero()方法的结果。

     

如果用户在getHero请求仍在处理时重新导航到此组件,则switchMap会取消旧请求,然后再次调用HeroService.getHero()。

答案 1 :(得分:1)

不要使用reloadPage()void,只需使用[routerLink]属性,如下所示:

from pathlib import Path
import shutil

start_path = Path(<start_dir>) 
dest_dir = Path(<dest_dir>)

for file in start_path.glob('**/*.jpg'):
    new_name = dest_dir.joinpath('_'.join(file.parts))
    print('renaming %s to %s' % (str(file), str(new_name)))
    # file.rename(new_name)  # move
    # shutil.copy(file, new_name) # copy, newer python
    # shutil.copy(str(file), str(new_name)) # copy, older python 

https://angular-2-training-book.rangle.io/handout/routing/routeparams.html

这篇文章可能对您有用