首页 > 解决方案 > 从角度 4 中的另一个组件更改布尔值

问题描述

我正在使用Booleansand auserRights.service来检查导航点是显示还是隐藏。因此,我想检查登录用户的权限,然后将导航的变量设置为trueor false

为此,我有两个组件: Mynavbar.component.ts和 my login.component.ts. 在我navbar.component.ts的里面是这样的布尔值(15)->

canAddHardware
canChangeUserRights
canEditBlog
...

所以现在用户登录,在我login.component.ts的内部并且onLogin()函数被触发。userRights.service.userHasRight('canAddHardware')例如,我打电话给 my ,而我需要Booleanmy 内部是从 my -> true 或 falsenavbar.component.ts返回的值userRights.service.userHasRight('canAddHardware')

我尝试了很多东西,但我无法弄清楚如何做到这一点。

标签: angular

解决方案


如果此组件不是同级组件,则可以创建如下消息服务:

export class ShareDataService {
messageSource = new BehaviorSubject<IMessage>({
    messageType: 'message',
    payload: 'something',
});
currentMessage: Observable<IMessage> = this.messageSource.asObservable();
changeMessage(message: IMessage) {
    this.messageSource.next(message);
}

}

然后从您的 login.component.ts 中,您可以使用如下方法发送消息:

    sendMessage(message: MessageType, data: any) {
    const messageToSend: IMessage = {
        messageType: message,
        payload: data,
    };
    this.shareDataService.send(messageToSend);
}

在您的 navbar.component.ts 中,您可以在 ngOnInit 中收听该消息,例如:

        this.shareDataService.currentMessage.subscribe((message: IMessage) => {
          if (message === 'message') {
              this.canAddHardware = true;
          }
        });

推荐阅读