zoukankan      html  css  js  c++  java
  • [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>
  • 相关阅读:
    vsftpd用户登陆目录
    Linux下能否用用apache运行ASP.NET的WebService
    rose软件下载(Rational Rose 2003 Enterprise Edition)
    linux删除目录
    2013314 生活日记
    ubuntu12.10安装GTK+
    SqlServer 基础知识数据检索、查询排序
    获取时间段:本周、本月、本年
    二、自定义控件之RadioButtonList
    ext.net 开发学习之FileUploadField与Image (四)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/7259933.html
Copyright © 2011-2022 走看看