Не совсем уверен, сработает ли это, и будет ли это хороший путь, но я бы попытался создать несколько дочерних маршрутов к одному и тому же GameComponent, например:
const appRoutes: Routes = [
{
path: 'game',
children: [
{ path: '', component: GameComponent },
{ path: ':width', component: GameComponent },
{ path: ':width/:height', component: GameComponent }
]
}];
Так что я могуиспользуйте / game / game / 50 и / game / 50/80, и я бы управлял логикой в GameComponent ngOnInit с некоторыми условиями для параметров в зависимости от ситуации:
width: number;
height: number;
ngOnInit() {
this.route.paramMap.subscribe(params => {
if (params['width'] && params['height']) {
this.width = +params['width']; // + converts string 'width' to a number
this.height = +params['height'];
// /game/50/80 - do something
} else if (params['width']) {
this.width = +params['width'];
// /game/50 - do something
} else {
// /game - do something
}
}
}
Тогда я мог бы обойти это.width! this.width и this.height! this.height для обработки другого сценария в моем компоненте
В противном случае я бы также исследовал путь queryParamMap таким же образом или также ActivatedRoute с системой Snapshot, подобной этой:
this.width = this.route.snapshot.paramMap.get('width');
this.height = this.route.snapshot.paramMap.get('height');
if (this.width && this.height) {
// do something
} else if (this.width && !this.height) {
// do something
} else {
// /game
}
Ссылка: Угловая маршрутизация: параметры маршрута