2017-10-05 1 views
0

여기에 문제가 있습니다 :각도 4 : 사용자 상태에 조건부 표시

사용자 로그인 상태에 따라 현재 응용 프로그램에서 일부 조건부 표시를 만들기 위해이 작은 자습서를 따르려고합니다.

https://loiane.com/2017/08/angular-hide-navbar-login-page/

그것은 효율적 & 아주 간단 보인다 : 여기에 링크입니다. 그러나 현재 응용 프로그램 내에서 작동시키지 못합니다.

최고 menu.component.ts :

authStatus: Observable<boolean>; 

constructor(private authService: AuthService){ 
} 

ngOnInit(){ 
    this.authStatus = this.authService.isLoggedIn(); 
} 

login(){ 
    this.authService.login(); 
} 

logout(){ 
    this.authService.logout(); 
} 

최고 menu.component.html :

<li><span (click)="login()">LOGIN</span></li> 
<li><span (click)="logout()">LOGOUT</span></li> 
//... 
<li *ngIf="authStatus | async"><a [routerLink]="['/login']">CONDITIONAL LOGIN</a></li> 
<li *ngIf="!authStatus | async"><a [routerLink]="['/logout']">CONDITIONAL LOGOUT</a></li> 

주요 튜토리얼 가이드 라인에 따라,이 코드에 와서 auth.service.ts :

public loggedIn = new BehaviorSubject<boolean>(false); 

get isLoggedIn(){ 
    return this.loggedIn.asObservable(); 
} 

login(){ 
    this.loggedIn.next(true); 
} 

logout(){ 
    this.loggedIn.next(false); 
} 

아무도 내가 잘못한 것을 설명 할 수 있습니까? ...? 나는

+0

왜 this.authStatus를 컨스트럭터, oninit에 할당할까요? –

+0

튜토리얼의 일부가 아니었던 "구독 부분"이 맞지 않습니다. 내 의견은 맞습니다.이 줄은 삭제합니다. . 그러나 이것은 문제를 해결하지 못합니다 .... – Julo0sS

+0

'ngOnInit'의 생성자 ..remove에서 구독을 제거하지 마십시오 – Rahul

답변

0

는, 생성자에서 제거 onint 코드이

login(){ 
    this.authStatus = this.authService.login(); 
} 

logout(){ 
    this.authStatus = this.authService.logout(); 
} 

을 시도해보십시오 인터넷에서하지만 성공 다른 예 ... 읽기/도움을

감사를 확인

0

편집

여기 링크 plunkr

authStatus: boolean; 
subscription: Subscription; 
constructor(private authService: AuthService){ 
    this.subscription = this.authService.isLoggedIn().subscribe(result => { 
     this.authStatus = result; 
    }); 
} 

ngOnInit(){ 
    // this.authStatus = this.authService.isLoggedIn(); 
} 

login(){ 
    this.authService.login(); 
} 

logout(){ 
    this.authService.logout(); 
} 

당신이 로그 아웃/로그인 각각의 상태를 클릭은 this.authStatus에 업데이 트하고 easly

isLoggedIn 기능은 당신에게 생성자에서 가입 할 수있는 관찰을 반환 HTML에 바인딩 할 수 있습니다. ngOnInit에 this.authStatus = this.authService.isLoggedIn();을 추가 할 필요가 없습니다. 왜냐하면 this.authStatus가 우리가 요구하는 부울 값이 아닌 Observable의 인스턴스가 될 것이기 때문입니다.

+0

top-menu.component.ts, @ subscription line,이 오류가 발생합니다. 유형에 통화 서명이없는 표현식을 호출 할 수 없습니다. 'Observable '유형에는 호환 가능한 호출 서명이 없습니다. – Julo0sS

+0

'import {Subscription}'을 'rxjs/Subscription'에서 가져 왔습니까? – Rahul

+0

같은 오류 ... 물론 내가 구독을 가져 왔어. 위의 코드는 간단한 샘플입니다. 내 서비스 함수 서명은 다음과 같습니다 : 로그인 (사용자 이름 : 문자열, 암호 : 문자열) : 관찰 가능 Julo0sS