Simple Auth service:

  1. import { Injectable } from '@angular/core';
  2. import {HttpClient} from '@angular/common/http';
  3. import {Observable} from 'rxjs/Observable';
  4. import {User} from '../model/user';
  5. import {BehaviorSubject} from 'rxjs/BehaviorSubject';
  6. import 'rxjs/add/operator/map';
  7.  
  8. export const ANONYMOUS_USER: User = {
  9. id: undefined,
  10. email: ''
  11. };
  12.  
  13. @Injectable()
  14. export class AuthService {
  15.  
  16. subject = new BehaviorSubject<User>(ANONYMOUS_USER);
  17. user$: Observable<User> = this.subject.asObservable();
  18. isLoggedIn$: Observable<boolean> = this.user$.map(user => !!user.id);
  19. isLoggedOut$: Observable<boolean> = this.isLoggedIn$.map(isLoggedIn => !isLoggedIn);
  20.  
  21. constructor(private http: HttpClient) { }
  22.  
  23. signUp(email: string, password: string) {
  24.  
  25. }
  26.  
  27. }

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:

  1. import {Component, OnInit} from '@angular/core';
  2. import {AuthService} from './services/auth.service';
  3. import {Observable} from 'rxjs/Observable';
  4. import {User} from './model/user';
  5.  
  6. @Component({
  7. selector: 'app-root',
  8. templateUrl: './app.component.html',
  9. styleUrls: ['./app.component.css']
  10. })
  11. export class AppComponent implements OnInit {
  12.  
  13. user$: Observable<User>;
  14. isLoggedIn$: Observable<boolean>;
  15. isLoggedOut$: Observable<boolean>;
  16.  
  17. constructor(private auth: AuthService) {
  18.  
  19. }
  20.  
  21. ngOnInit() {
  22. this.user$ = this.auth.user$;
  23. this.isLoggedIn$ = this.auth.isLoggedIn$;
  24. this.isLoggedOut$ = this.auth.isLoggedOut$;
  25. }
  26. }

HTML:

  1. <li *ngIf="isLoggedOut$ | async">
  2. <a routerLink="/signup">Sign Up</a>
  3. </li>
  4. <li *ngIf="isLoggedOut$ | async">
  5. <a routerLink="/login">Login</a>
  6. </li>
  7. <li *ngIf="isLoggedIn$ | async">
  8. <a >Logout</a>
  9. </li>

[Angular] Design API for show / hide components based on Auth的更多相关文章

  1. Angular中文api

    Angular中文api:http://docs.ngnice.com/api

  2. angular -- $route API翻译

    $route -$routeProvider服务 -依赖ngRoute模块 $route能够在路径发生改变的时候,渲染不同的视图,调用不同的控制器.它监测了$location.url(),然后根据路径 ...

  3. 文献翻译|Design of True Random Number Generator Based on Multi-stage Feedback Ring Oscillator(基于多级反馈环形振荡器的真随机数发生器设计)

    基于多级反馈环形振荡器的真随机数发生器设计 摘要 真随机数生成器(trng)在加密系统中起着重要的作用.本文提出了一种在现场可编程门阵列(FPGA)上生成真随机数的新方法,该方法以 多级反馈环形振荡器 ...

  4. Angular JS API

    ng function angular.bind angular.bootstrap angular.copy angular.element angular.equals angular.exten ...

  5. angular -- $routeParams API翻译

    原api出处: https://docs.angularjs.org/api/ngRoute/service/$routeParams $routeParams 可以获取当前路径参数. 需要ngrou ...

  6. 前端技术之:常见前端UI相关开源项目

    Bootstrap https://getbootstrap.com/BootstrapVue provides one of the most comprehensive implementatio ...

  7. Web API design

    Web API design 28 minutes to read Most modern web applications expose APIs that clients can use to i ...

  8. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)

    在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot ...

  9. 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 ...

随机推荐

  1. 自己定义控件-DownSlidingDrawer

    一.描写叙述 能够下拉的 SlidingDrawer 二.效果图 图片是网上找到,可是效果是一样的 三.源代码 https://github.com/mentor811/Demo_MySlidingD ...

  2. Scott Hanselman的问题-3

    .Net程序员面试 中级篇 (回答Scott Hanselman的问题)   继<.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)>跟<.Net程序员 ...

  3. google dataflow model 论文

    http://www.chinacloud.cn/show.aspx?id=24446&cid=17

  4. 00079_增强for循环

    1.格式 /* * JDK1.5新特性,增强for循环 * JDK1.5版本后,出现新的接口 java.lang.Iterable * Collection开始继承Iterable * Iterabl ...

  5. 【hihocoder 1369】网络流一·Ford-Fulkerson算法

    [Link]:http://hihocoder.com/problemset/problem/1369 [Description] [Solution] 最大流模板题 [NumberOf WA] [R ...

  6. 洛谷 P1313 计算系数

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  7. jQuery自定义插件规范

    <ul class="list"> <li>导航列表 <ul class="nav"> <li>导航列表1< ...

  8. Fedora 10下应用网络模拟器NS心得

    650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" ...

  9. 一个小的考试系统 android 思路

    一个小的考试系统 android 思路 假如有 100 组,每组有4个单选钮,设置超时检测确认后去测结果估分视图去切换,如果还有,就再显示下一组 所有结束就给个总结显示 有超时结束过程加上 提示正确选 ...

  10. 错误 make: Nothing to be done for 'default'

    Makefile书写格式非常严格,all:<TAB缩进>make -C $(KDIR) M=$(PWD) $(EXTRA_CFLAGS) modulesdefault:<TAB缩进& ...