#angular #angular-routing
Вопрос:
У меня есть маршрут под названием «партнеры», и когда путь попадает в «партнеры/:слизняк», я слушаю изменения активированного маршрута, чтобы обновить переведенное название.
Когда я впервые ввожу партнерский компонент, заголовок страницы переводится и отображается правильно. Но когда я перехожу к нижней части этого компонента и переключаюсь на другого партнера, заголовок моей страницы переходит в «партнеры» без правильного заголовка страницы.
подсказки
- после обновления страницы заголовок меняется на хороший
- если я изменю URL напрямую, то заголовок страницы также будет правильным
Что я пропустил?
Мой файл маршрутизации:
import { PartnerComponent } from './container/partner.component';
const routes: Routes = [
{
path: ':slug',
component: PartnerComponent,
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class PartnersRoutingModule {}
И мой ПартнерКомпонент
@Component({
selector: 'app-partner',
templateUrl: './partner.component.html',
styleUrls: ['./partner.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [HttpService],
})
export class PartnerComponent implements OnInit, OnDestroy {
partner$ = new BehaviorSubject<Partner>(null);
private subscriptions = new Subscription();
constructor(
private router: Router,
private activatedRoute: ActivatedRoute,
private httpService: HttpService,
private windowService: WindowService,
private routingTabTitleService: RoutingTabTitleService,
) {}
ngOnInit(): void {
this.subscriptions.add(
this.activatedRoute.params
.pipe(
map((params) => params.slug as string),
mergeMap((slug) => {
return this.httpService.getPartner(slug);
}),
tap((partner) => {
this.partner$.next(partner);
this.displayTranslatedProduct(partner.name);
this.windowService.scrollTop();
}),
catchError(() => {
void this.router.navigate(['pl', 'not-found'], { skipLocationChange: true });
return of(null);
}),
)
.subscribe(),
);
}
displayTranslatedProduct(partnerName: string): void {
const translatedTitle = this.routingTabTitleService.translateTitle('PAGE.TITLE', 'partner');
this.routingTabTitleService.setTitle(`${translatedTitle}: ${partnerName}`);
}
ngOnDestroy(): void {
this.subscriptions.unsubscribe();
}
}
и на другом компоненте с маршрутными ссылками я перемещаюсь так:
<a
*ngFor="let partner of partners"
[routerLink]="'/partners/' partner.slug | localize"
class="partner-logo d-flex align-items-center justify-content-center pointer flex-wrap"
>
Комментарии:
1. Заглавные буквы-это нехорошо .
Ответ №1:
Добавьте это в ngOnInit() компонента (компонента-партнера), который подписывается на параметр:
ngOnInit(): void {
// ... subscription to param
this.router.routeReuseStrategy.shouldReuseRoute = () => false
}
Комментарии:
1. Дайте мне знать, если это сработает, если нет, я посмотрю еще раз. Если вы сделаете StackBlitz , нам будет легче помочь вам с вашим кодом. Овации
2. Это работает для решения этой проблемы, но когда я, например, оставляю раздел «Партнеры» на домашней странице, из-за этого заголовок страницы не обновляется.
Ответ №2:
Рабочее решение:
ngOnInit(): void {
this.activatedRoute.params.pipe(tap(() => {
void this.router.navigate([this.router.url], { relativeTo: this.activatedRoute, skipLocationChange: false });
})).subscribe();
}