我有一个主组件,可以加载页眉、页脚、侧边栏等.页眉上有一个下拉列表,用户登录后可以设置其选项.我希望标题保持不变,即使我导航到加载不同子组件的不同路径.这意味着所选选项不应更改,所有子组件中的下拉列表值都应可访问.更改下拉列表值后,应更新/重新加载当前子组件.

我应该如何处理这个问题?我想介绍一种功能.主组件中的模型更改后,重新加载当前子组件.在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(){
    }
}

enter image description here

推荐答案

使用@Input将数据传递给子组件,然后使用ngOnChanges(https://angular.io/api/core/OnChanges)查看@Input是否在运行中更改.

Angular相关问答推荐

Angular 空变量使用组件之间的共享服务

停靠的Angular 应用程序的Nginx反向代理无法加载assets资源

以17角表示的自定义元素

当元素在元素上使用迭代变量时,如何重构ngFor?

如何使用带有17角的Swiper 11.0.5元素

Angular6:RxJS switchMap 运算符未按预期工作

如何更改 Angular material 按钮中的内部 RippleColor 和 UnboundedRipple 效果?

可观察的等待直到另一个可观察的值

尽管模型中的变量发生了变化,但Angular 视图没有更新

当我ng serve时,Angular CLI 提示TypeError: callbacks[i] is not a function

Subject.complete() 是否取消订阅所有听众?

可从 Angular2 中的

Angular CLI 自定义 webpack 配置

ViewChild 和 ContentChild 的所有有效 Select 器是什么?

如何使用依赖注入扩展组件?

如何手动延迟加载模块?

在Angular2中获取服务的域名

提交后在Angular 2中重置表单

CustomPipe 没有提供者

如何在Angular 2中将对象从一个组件传递到另一个组件?