#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 вместо наблюдаемых параметров запроса, вот почему.