[Angular] Design API for show / hide components based on Auth
Simple Auth service:
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>
[Angular] Design API for show / hide components based on Auth的更多相关文章
- Angular中文api
Angular中文api:http://docs.ngnice.com/api
- angular -- $route API翻译
$route -$routeProvider服务 -依赖ngRoute模块 $route能够在路径发生改变的时候,渲染不同的视图,调用不同的控制器.它监测了$location.url(),然后根据路径 ...
- 文献翻译|Design of True Random Number Generator Based on Multi-stage Feedback Ring Oscillator(基于多级反馈环形振荡器的真随机数发生器设计)
基于多级反馈环形振荡器的真随机数发生器设计 摘要 真随机数生成器(trng)在加密系统中起着重要的作用.本文提出了一种在现场可编程门阵列(FPGA)上生成真随机数的新方法,该方法以 多级反馈环形振荡器 ...
- Angular JS API
ng function angular.bind angular.bootstrap angular.copy angular.element angular.equals angular.exten ...
- angular -- $routeParams API翻译
原api出处: https://docs.angularjs.org/api/ngRoute/service/$routeParams $routeParams 可以获取当前路径参数. 需要ngrou ...
- 前端技术之:常见前端UI相关开源项目
Bootstrap https://getbootstrap.com/BootstrapVue provides one of the most comprehensive implementatio ...
- Web API design
Web API design 28 minutes to read Most modern web applications expose APIs that clients can use to i ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)
在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot ...
- View and Data API Tips: Hide elements in viewer completely
By Daniel Du With View and Data API, you can hide some elements in viewer by calling "viewer.hi ...
随机推荐
- OpenCASCADE Extended Data Exchange - XDE
OpenCASCADE Extended Data Exchange - XDE eryar@163.com Abstract. OpenCASCADE Data Exchange allows de ...
- 运行maven项目出现的报错
java问题:严重: Error configuring application listener of class org.springframework.web.context.Cont 解决方案 ...
- es69
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux下MySQL导入导出数据库
linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql# ...
- Redis安装以及配置
下载 http://redis.io/download 解压 tar zxvf redis-2.8.17.tar.gz 编译并安装 1 2 3 4 cd redis-2.8.17 make cd sr ...
- 【IOS学习】1.第一个IOS程序
1.执行原理 a.首先执行main函数 调用UIApplicationMain方法 return UIApplicationMain(argc, argv, nil, NSStringFromClas ...
- 2017国家集训队作业[agc006e]Rotate 3x3
2017国家集训队作业[agc006e]Rotate 3x3 题意: 给你一个\(3*N\)的网格,每次操作选择一个\(3*3\)的网格,旋转\(180^\circ\).问可不可以使每个位置\(( ...
- LuoguP4016 负载平衡问题(费用流)
题目描述 G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入输出格式 输入格式: ...
- IDLE的自动补全功能
IDLE的自动补全功能位于:Edit→Show Completions,但每次需要补全的时候都需要点击一次,虽然IDLE提供了一个快捷键(Ctrl + Space),但实测无效.具体操作如下图
- Java总结之线程
[线程的基本概念] 线程是一个程序内部的顺序控制流. 线程和进程的差别: 每一个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销. 线程能够看成是轻量级的进程,同一类线程 ...