私はAngular 2+アプリを開発中です。 AngularJSでは比較的単純なものを実装することは非常に困難です。ユーザーがログインしたとき、またはログアウトしたときにのみ要素を表示するにはどうすればよいですか?
私は彼女があるときにユーザーがログインしてLOG OUTされていない場合 INボタンLOGを表示するために私の上部のナビゲーションをしたいと思います。
私はあらゆることを試みてきましたが、正しく動作させることはできません。私はそれが全体のアプリ間で、一貫して仕事をしたい、と私の現在の実装がまったく機能していない
かかわらず、リロードの(isLoggedIn
localStorage
にそれが格納)、しかし、あなたが言うことができるので、私はここでそれを共有しましょうもし私が少なくとも正しい場所にいるなら、私は私を救います。
トップnavigation.component.html
<p class="nav-item my-2 my-lg-0" *ngIf="!isLoggedIn | async"><a class="nav-link" routerLink="/login" routerLinkActive="active">Login</a></p>
<p class="nav-item my-2 my-lg-0" *ngIf="isLoggedIn | async"><a class="nav-link" routerLink="//logout" routerLinkActive="active">Logout</a></p>
トップnavigation.component.ts
export class TopNavigationComponent implements OnInit {
@ViewChild('topnav') topnav: ElementRef;
//isLoggedIn: boolean;
isLoggedIn: Observable<Boolean>;
constructor(private authService: AuthService, private logger: LoggerService) { }
ngOnInit() {
this.isLoggedIn = this.authService.getIsLoggedIn();
}
auth.service.ts
@Injectable()
export class AuthService {
loggedIn$: Subject<Boolean> = new Subject<Boolean>();
constructor(private logger: LoggerService) {
let isLoggedInLocalStore = (localStorage.getItem('isLoggedIn') === 'true');
if (!isLoggedInLocalStore) {
isLoggedInLocalStore = false;
localStorage.setItem('isLoggedIn', isLoggedInLocalStore.toString());
}
}
getIsLoggedIn(): Observable<Boolean> {
//return (localStorage.getItem('isLoggedIn') === 'true');
return this.loggedIn$.asObservable();
}
login(): void {
// TODO
this.logger.log("AuthService | Login clicked...");
localStorage.setItem('isLoggedIn', 'true');
this.loggedIn$.next(true);
}
logout() {
// TODO
localStorage.setItem('isLoggedIn', 'false');
this.loggedIn$.next(false);
}
}
「実用例」のリンクには何も表示されません – CodyBugstein
Googleでログインしたことが表示されませんでした。そして、ログインしてからログアウトボタンが表示されます –
そして、私は答えが上記の共有サービスを利用していると思います。これは私のプロジェクトのために何かしたもので、例として示したものです –