【发布时间】:2017-03-08 12:02:32
【问题描述】:
我有一个 MasterComponent,它加载页眉、页脚、侧边栏等。在页眉上有一个下拉菜单,一旦用户登录,它的选项就会设置。我希望页眉保持不变,即使我导航到加载的不同路线不同的子组件。意味着所选选项不应更改,并且下拉列表的值应可在所有子组件中访问。 Onchange of dropdown value 当前子组件应该被更新/重新加载。
我应该如何解决这个问题?我想要事件监听器类型的功能。一旦 MasterComponent 中的模型发生变化,重新加载当前子组件。在 MasterComponent 的变量变量 update 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 我想从子组件访问父变量,反之亦然。并且父组件值应该在所有路由中保持一致。
标签: angular