[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 ...
随机推荐
- 自己定义控件-DownSlidingDrawer
一.描写叙述 能够下拉的 SlidingDrawer 二.效果图 图片是网上找到,可是效果是一样的 三.源代码 https://github.com/mentor811/Demo_MySlidingD ...
- Scott Hanselman的问题-3
.Net程序员面试 中级篇 (回答Scott Hanselman的问题) 继<.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)>跟<.Net程序员 ...
- google dataflow model 论文
http://www.chinacloud.cn/show.aspx?id=24446&cid=17
- 00079_增强for循环
1.格式 /* * JDK1.5新特性,增强for循环 * JDK1.5版本后,出现新的接口 java.lang.Iterable * Collection开始继承Iterable * Iterabl ...
- 【hihocoder 1369】网络流一·Ford-Fulkerson算法
[Link]:http://hihocoder.com/problemset/problem/1369 [Description] [Solution] 最大流模板题 [NumberOf WA] [R ...
- 洛谷 P1313 计算系数
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- jQuery自定义插件规范
<ul class="list"> <li>导航列表 <ul class="nav"> <li>导航列表1< ...
- Fedora 10下应用网络模拟器NS心得
650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" ...
- 一个小的考试系统 android 思路
一个小的考试系统 android 思路 假如有 100 组,每组有4个单选钮,设置超时检测确认后去测结果估分视图去切换,如果还有,就再显示下一组 所有结束就给个总结显示 有超时结束过程加上 提示正确选 ...
- 错误 make: Nothing to be done for 'default'
Makefile书写格式非常严格,all:<TAB缩进>make -C $(KDIR) M=$(PWD) $(EXTRA_CFLAGS) modulesdefault:<TAB缩进& ...