повторное разрешение данных при изменении параметра запроса?

#angular #router #paginator #resolver

#angular #typescript

Вопрос:

В моих проектах angular 2 я не смог перезагрузить страницу, перейдя по тому же URL, но с другими параметрами запроса. Я использую resolve для предварительной выборки данных при загрузке страницы.

Я пытаюсь заставить распознаватель повторно извлекать данные при изменении URL (параметра запроса). Как мне это сделать?

Ответ №1:

Теперь вы можете использовать это в своей конфигурации маршрута:

 {
  path: '',
  resolve: {
    data : DataResolver,
  },
  runGuardsAndResolvers: 'paramsOrQueryParamsChange',
  component: MainComponent
}
 
  

Передача ‘paramsOrQueryParamsChange’ в вашей конфигурации маршрута будет вызывать DataResolver при каждом изменении параметров или queryParams.
вы можете получить данные преобразователей в вашем MainComponent виде:

 ngOnInit() {
  this.activatedRoute.data.subscribe((resolversData) => {
     // is now triggered at each queryParams change
  })
}
  

смотрите документ для получения дополнительной информации

Комментарии:

1. Я ценю, что вы разместили ссылку на документ для получения дополнительной информации, но не могли бы вы предоставить некоторый контекст для этой ссылки.

2. для других параметров проверьте angular.io/api/router/RunGuardsAndResolvers

3. Когда я попробовал то же самое, я получаю подписку на данные только один раз. Последующие вызовы не передают событие в data

Ответ №2:

Я думаю, вы не можете изменить параметр запроса. Я не знаю, поможет ли это вам, но вот мой ответ.

 construtor(private route: ActivatedRoute) { }

ngOnInit() {

  this.route.snapshot.queryParams['something'];//when you snapshot and navigate to same url you can't get new query params, only for first initialization

  // to get new queryparams or url params also you need subscribe (for same url navigation)

  this.route.queryParams.subscribe({
      (queryParams: Params) => {
          this.yourParam = queryParams['something'];  
      }
   })
}
  

Я думаю, вы используете snapshot вместо наблюдаемых параметров запроса, вот почему.