У меня есть два формата URL
example.com/posts/:postId
и example.com/posts/:postId/:postTitle
точно так же как переполнение стека отдельных URL-адресов вопросов.
На angular маршруте мне нужно перенаправить все URL с :postId
на :postId/:PostTitle
или напрямую загрузить страницу с :postId/:PostTitle
на ту же страницу.
post .module.ts
const routes: Routes = [
{
path: ':postId',
resolve: {data: PdResolver},
redirectTo: ':postId/:PostTitle',
pathMatch: 'full'
},
{
path: ':postId/:PostTitle',
component: PostComponent,
data: {
title: 'This has to be the post fetched title'
}
}
];
redirectTo: ':postId/:PostTitle'
: здесь у меня нет postTitle, поэтому он выдает ошибку - Как я могу добавить postTitle к URL а также избежать дублирования вопроса URL.
- Какие рекомендации следует использовать по этой схеме.
У меня нет названия, поэтому сначала мне нужно получить postTitle с использованием postId, поэтому у нас есть преобразователь данных после публикации (PdResolver),
Обновление вопроса: Для обходного пути:
Я попытался с дочерним компонентом, который по крайней мере решает дело, но все еще задается вопросом, если я должен следовать этому подходу или нет.
{
path: ':postId',
component: PostOutletComponent,
resolve: {data: PdResolver},
children: [
{
path: ':postTitle',
component: PostComponent,
}]
}
И в PostOutletComponent
я перемещаюсь дальше к дочернему компоненту после получения заголовка
PostOutletComponent.ts
static stripHtml(html: string) {
let div = document.createElement('DIV');
div.innerHTML = html;
const cleanText = div.innerText;
div = null;
return cleanText;
}
ngOnInit() {
this.reolveData = this._route.snapshot.data;
let postTitle = PostOutletComponent.stripHtml(
this.reolveData.data.data.post_title);
postTitle = postTitle.replace(/\s+/g, '-').toLowerCase();
this.router.navigate([postTitle], {relativeTo: this._route});
}