@mletov

Как обновить страницу с Get параметром через router?

Пожалуйста, подскажите:
Есть проект на Angular 2+, SPA.
Есть сущности, к каждой сущности привязаны комментарии.
Страница комментариев для каждой сущности имеет в роутере адрес /comment-list/123, где 123 - id сущности.
На этой же странице есть форма добавления комментариев, после добавления комментария предполагается обновление списка комментариев на странице.

Пытался сделать релоад через
this.commentService.createComment(this.comment).subscribe(data => {
    var id = Number.parseInt(activeRoute.snapshot.params["id"]);
    this.router.navigate(['/comment-list', id]);
});

и
this.commentService.createComment(this.comment).subscribe(data => {
    var id = Number.parseInt(activeRoute.snapshot.params["id"]);
    this.router.navigateByUrl("/comment-list/" + id)
});


Но либо адрес страницы не меняется, либо меняется, но не обновляется список комментариев (не появляется добавленный комментарий).
Пока использую window.location.reload(), но это как-то не по SPA'шному.

Адрес на роутере
const appRoutes: Routes = [
   ...
    { path: 'comment-list/:id', component: CommentListComponent },
  ...
];
  • Вопрос задан
  • 1246 просмотров
Пригласить эксперта
Ответы на вопрос 2
streetflush
@streetflush
Перезагружать страницу вообще не по SPAшному )
Данные вы из сервиса получаете, вот ему и скажите чтобы он перезапросил комментарии а не с роутером воюйте.
Ответ написан
Комментировать
Sergamers
@Sergamers
front-end
Есть сервис в котором делается get и post запрос. Есть компонент который общается с этим сервисом. В компоненте делается:
Можно по кустарному
this.postRequest().subscribe( () => {
  this.getRequest().subscibe( () => {
    // ToDo
  });
})


Или Сделать обработку в post-e:

this.postRequest().subscribe( () => {
 // ToDo
});

//----------
// Сервис
postRequest(...data) {
 this.http.post(...).pipe(
  switchMap( () => { // меняем поток на getRequest
   return this.getRequest();
  })
 )
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы