У меня есть MasterComponent, который загружает верхний колонтитул, нижний колонтитул, боковую панель и т. Д. В заголовке есть выпадающий список, параметры которого задаются после входа пользователя в систему. Я хочу, чтобы заголовок был постоянным, даже если я перехожу к различным маршрутам, которые загружаются другой дочерний компонент. Значит, что выбранная опция не должна меняться, а значение раскрывающегося списка должно быть доступно во всех дочерних компонентах. При изменении выпадающего значения текущий дочерний компонент должен быть обновлен/перезагружен.Обновить дочерний компонент при изменении переменных в родительском компоненте. Angular2
Как мне подойти к этой проблеме? Я хочу, чтобы функция-слушатель имела функциональность. После изменения модели из MasterComponent Changes перезагрузите текущий дочерний компонент. При обновлении переменной переменной MasterComponent ChildComponent будет прослушивать обновление и запускать некоторую функцию или снова вызвать некоторый API и перезагрузить ChildComponent.
// routes
const appRoutes: Routes = [
{
path: '',
redirectTo: 'login',
pathMatch: 'full',
},
{ path: 'login', component: LoginComponent },
{ path: 'logout', component: LogoutComponent },
{
path: '',
component: MasterComponent,
canActivate: [AuthGuard],
children: [
{ path: 'record/create', component: RecordCreateComponent }, // create record for selectedRestaurant in MasterComponent
{ path: 'record/', component: RecordComponent }, // shows all record of current selectedRestaurant in MasterComponent
{ path: 'record/:id/update', component:RecordUpdateComponent }, // show form to edit record having id
{ path: 'record/:id', component: RecordComponent }, // show record details having id
]
},
{ path: '**', redirectTo: 'login' }
];
// MasterComponent
@Component({
selector: 'master',
templateUrl: templateUrl,
styleUrls:[styleUrl1]
})
export class MasterComponent implements AfterViewInit, OnInit{
restaurants: Array<Restaurant> = [];
user:User;
selectedRestaurant: Restaurant;
constructor(private router: Router, private storageHelper:StorageHelper){
}
ngAfterViewInit() {
}
ngOnInit(){
this.user = JSON.parse(this.storageHelper.getItem('user'));
this.restaurants = this.user.restaurants;
this.selectedRestaurant = this.restaurants[0];
this.router.navigate(['/record/' + this.selectedRestaurant.id]);
}
onRestaurantChange(){
this.router.navigate(['/record/' + this.selectedRestaurant.id]);
}
createRecord(){
}
}
Тема вопроса вводит в заблуждение «Измените дочерний компонент без перезагрузки родительского компонента». Вам просто нужно правильно настроить маршрутизатор. Кажется, что не проблема родителей <->. – jmachnik
@jmachnik Я хочу получить доступ к родительским переменным из дочернего компонента и наоборот. Значение родительских компонентов должно быть согласованным во всех маршрутах. – Kaushal