import{Component,OnInit}from'@angular/core';import{MatDialog,MatDialogConfig}from'@angular/material/dialog';import{Router}from'@angular/router';import{AccountService}from'src/app/core/auth/account.service';import{AppConfirmService}from'src/app/core/service/app-confirm/app-confirm.service';import{LoginService}from'src/app/core/service/login.service';import{AlterarUsuarioLogadoComponent}from'../modal/alterar/alterar-usuario-logado.component';import{ExtratoComponent}from'../modal/extrato/extrato.component';import{LoginComponent}from'../modal/login/login.component';import{NotaFiscalComponent}from'../modal/nota-fiscal/nota-fiscal.component';@Component({selector:'app-my-header',templateUrl:'./my-header.component.html',styleUrls:['./my-header.component.scss'],})exportclassMyHeaderComponentimplementsOnInit{menuState:boolean=false;logado:boolean;showNavigationIndicators=false;constructor(privateconfirmService:AppConfirmService,privateloginService:LoginService,privatedialog:MatDialog,privaterouter:Router,privateaccountService:AccountService){this.logado=false;}asyncngOnInit(){this.logado=awaitthis.accountService.isAuthenticated();}meuPerfil():void{constdialogConfig=newMatDialogConfig();dialogConfig.disableClose=true;dialogConfig.autoFocus=true;dialogConfig.width='600px';this.dialog.open(AlterarUsuarioLogadoComponent,dialogConfig);}extrato():void{constdialogConfig=newMatDialogConfig();dialogConfig.disableClose=true;dialogConfig.autoFocus=true;dialogConfig.width='405px';this.dialog.open(ExtratoComponent,dialogConfig);}notaFiscal():void{constdialogConfig=newMatDialogConfig();dialogConfig.disableClose=true;dialogConfig.autoFocus=true;dialogConfig.width='405px';dialogConfig.height='580px';this.dialog.open(NotaFiscalComponent,dialogConfig);}logout():void{this.confirmService.confirm({title:'Sair',message:'Deseja sair do sistema ?',}).subscribe(async(res)=>{if(!res){return;}else{this.logado=false;this.loginService.logout();}});}showMenu():void{this.menuState=!this.menuState;}getMenuState():boolean{returnthis.menuState;}asyncreward(){this.logado=this.accountService.isAuthenticated();if(!this.logado){this.login();}else{//this.router.navigate(['/reward']);}}asyncopeneemQuiz(){this.logado=this.accountService.isAuthenticated();if(!this.logado){this.login();}else{this.router.navigate(['/openeem-quiz']);}}asyncblog(){this.logado=this.accountService.isAuthenticated();this.router.navigate(['/blog']);}asyncsobre(){this.logado=this.accountService.isAuthenticated();//this.router.navigate(['/sobre']);}asyncbibliotecaCientifica(){this.logado=this.accountService.isAuthenticated();//this.router.navigate(['/biblioteca-cientifica']);}privatelogin():void{constdialogConfig=newMatDialogConfig();dialogConfig.disableClose=true;dialogConfig.autoFocus=true;dialogConfig.width='393px';dialogConfig.height='433px';constdialogRef=this.dialog.open(LoginComponent,dialogConfig);dialogRef.afterClosed().subscribe((retorno)=>{if(retorno){this.logado=true;}});}}
agora entendi então, se dá um reload ele funciona normal, se não der reload o funcionamento nao da certo.
Mostra o código exatamente onde acontece o problema, quando deveria dar certo e não dá
L
Lucas_Camara1 like
Pegue o hábito de usar Observable para conseguir obter uma atualização mais fácil nos seus componentes. Usando observables, vc consegue enviar notificações para os componentes que estão “escutando” determinado observable.
E nos componentes, em vez de usar o boolean puro, use o observable retornado pelo isLogado. E veja se funciona. Pelo que me lembro, ao renderizar o componente, o angular entende que é um observable e já resolve ele. E caso o subject mude, o observable já será notificado na proxima vez.
G
guilhermebhte
Como falei o login funcionou.
Mas o logout não
L
Lucas_Camara1 like
Como está o componente que não respeitou o logout? Ele está usando o observable? São só esses dois componentes my-header.component e pagina-inicial-logado.component que devem reagir ao login e logout?
No lugar que for usar a situação de logado, vc deve usar a observable assim: