Любая подсказка о том, как синхронизировать некоторую информацию о состоянии конкретной страницы непосредственно в URL-адресе в качестве параметра URL-адреса.
Учитывая это стекблиц
Я бы хотел, чтобы каждый раз, когда выбирается еда, URL-адрес обновлялся параметром ?favouriteFood=selectedFood
Конечно, такие параметры, если они есть, будут использоваться в ngInit() для инициализации состояния страницы.
Я обновил ваш пример StackBlitz здесь.
Вот основные шаги:
Импортируйте Angular МаршрутизаторМодуль в свое приложение:
@NgModule({
imports: [
RouterModule.forRoot([])
]
})
export class AppModule {}
Слушайте изменения параметров запроса маршрута из ActivatedRoute:
ngOnInit() {
// Remember to unsubscribe when this component is destroyed
this.route.queryParams.subscribe(params => {
const selectedFood = this.foods.find(f => f.value === params.food);
if (selectedFood) {
this.selectedFood = selectedFood;
}
});
}
Обновите URL-адрес, когда пользователь изменит выбор из доступных вариантов, используя Router.navigate:
foodSelectionChange(change: MatSelectChange) {
const food: Food = change.value;
this.router.navigate([], {
queryParams: { food: food.value }
});
}
Попробуйте использовать replaceState
.
import {Location} from '@angular/common';
@Component({
selector: 'example-component',
templateUrl: 'example.component.html'
})
export class ExampleComponent
{
constructor( private location: Location )
{}
setTheFood()
{
this.location.replaceState('favouriteFood=selectedFood');
}
}
Да, это именно то, что я искал. Вот stackblitz.com/edit/angular-ztm9ti-v2m4x5 ваш пример с реализованной отпиской