[Angular] Design API for show / hide components based on Auth
2017-07-30 18:18
579 查看
Simple Auth service:
Using Observable is a easy way to implement reactive application.
Create a BehaviorSubject and then convert subject to Observable. BehaviorSubject also takes a init param.
The isLoggedIn$ & isLoggedOut$ based on user$.
The in the component, we inject the auth service:
HTML:
import { Injectable } from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {Observable} from 'rxjs/Observable'; import {User} from '../model/user'; import {BehaviorSubject} from 'rxjs/BehaviorSubject'; import 'rxjs/add/operator/map'; export const ANONYMOUS_USER: User = { id: undefined, email: '' }; @Injectable() export class AuthService { subject = new BehaviorSubject<User>(ANONYMOUS_USER); user$: Observable<User> = this.subject.asObservable(); isLoggedIn$: Observable<boolean> = this.user$.map(user => !!user.id); isLoggedOut$: Observable<boolean> = this.isLoggedIn$.map(isLoggedIn => !isLoggedIn); constructor(private http: HttpClient) { } signUp(email: string, password: string) { } }
Using Observable is a easy way to implement reactive application.
Create a BehaviorSubject and then convert subject to Observable. BehaviorSubject also takes a init param.
The isLoggedIn$ & isLoggedOut$ based on user$.
The in the component, we inject the auth service:
import {Component, OnInit} from '@angular/core'; import {AuthService} from './services/auth.service'; import {Observable} from 'rxjs/Observable'; import {User} from './model/user'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit { user$: Observable<User>; isLoggedIn$: Observable<boolean>; isLoggedOut$: Observable<boolean>; constructor(private auth: AuthService) { } ngOnInit() { this.user$ = this.auth.user$; this.isLoggedIn$ = this.auth.isLoggedIn$; this.isLoggedOut$ = this.auth.isLoggedOut$; } }
HTML:
<li *ngIf="isLoggedOut$ | async"> <a routerLink="/signup">Sign Up</a> </li> <li *ngIf="isLoggedOut$ | async"> <a routerLink="/login">Login</a> </li> <li *ngIf="isLoggedIn$ | async"> <a >Logout</a> </li>
相关文章推荐
- [转] Intel release open source OpenGL API-based 3D graphics drivers for Linux on 965 Express chipset
- How to hide and show elements based on a Content Control value change?
- A demo for parallel computation based on yuan api technology log
- On API Design Guidelines
- theano 报错WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLA
- Enterprise Application Achitecture Design Based on LiteMDA 0.5
- 移动匿名支付购物方案 A Lightweight Anonymous Mobile Shopping Scheme Based on DAA for Trusted Mobile Platform
- Vue.js常用指令汇总(v-if//v-show//v-else//v-for//v-bind//v-on等)
- “API design is like sex: Make one mistake and support it for the rest of your life.”
- An Automatic Detection Scheme for Periodic Signals Based on Spectrum Analyzer Measurements 导读
- Angular.js中ng-if、ng-show和ng-hide的区别介绍
- 对Semi-supervised classification for hyperspectral imagery based on *** 的理解
- 2013_CVPR_BoF meets HOG Feature Extraction based on Histograms of Oriented p.d.f Gradients for Imag
- How to show or hide filename extensions on Mac
- 论文阅读之:Deep Meta Learning for Real-Time Visual Tracking based on Target-Specific Feature Space
- [Angular2 Form] Reactive Form, show error message for one field
- React实现Angularjs ng-show、ng-if和ng-hide
- Find person you are mostly like based on HMM image recognition -- only for fun
- 【C语言基础】文件中任意位置插入写操作的实现/Implementation For File Insertion Operation based on C standard lib.
- Plant Design Review Based on AnyCAD