[Angular] Reactive Store and AngularFire Observables
A simple store implemenet:
- import { Observable } from 'rxjs/Observable';
- import { BehaviorSubject } from 'rxjs/BehaviorSubject';
- import 'rxjs/add/operator/pluck';
- import 'rxjs/add/operator/distinctUntilChanged';
- import {User} from './auth/shared/services/auth/auth.service';
- export interface State {
- user: User;
- [key: string]: any
- }
- const state: State = {
- user: undefined
- };
- export class Store {
- private subject = new BehaviorSubject<State>(state);
- private store = this.subject.asObservable().distinctUntilChanged();
- get value() {
- return this.subject.value;
- }
- select<T>(name: string): Observable<T> {
- return this.store.pluck(name);
- }
- set(name: string, state: any) {
- this.subject.next({ ...this.value, [name]: state });
- }
- }
Using this store in AuthService:
- import {Injectable} from '@angular/core';
- import {AngularFireAuth} from 'angularfire2/auth';
- import {Store} from 'store';
- import 'rxjs/add/operator/do';
- export interface User {
- uid: string;
- email: string;
- authenticated: boolean;
- }
- @Injectable()
- export class AuthService {
- // handle on every auth state changes
- auth$ = this.af.authState
- .do(next => {
- if (!next) {
- this.store.set('user', null);
- return;
- }
- const user = {
- email: next.email,
- uid: next.uid,
- authenticated: true
- };
- this.store.set('user', user);
- });
- constructor(
- private af: AngularFireAuth,
- private store: Store
- ) {
- }
- createUser(email: string, password: string) {
- return this.af.auth.createUserWithEmailAndPassword(email, password);
- }
- loginUser(email: string, password: string) {
- return this.af.auth.signInWithEmailAndPassword(email, password)
- }
- }
Using Reactive approach in app.component.ts:
- import {Component, OnDestroy, OnInit} from '@angular/core';
- import {Store} from 'store';
- import {AuthService} from '../../../auth/shared/services/auth/auth.service';
- import {Observable} from 'rxjs/Observable';
- import {Subscription} from 'rxjs/Subscription';
- import {User} from 'firebase/app';
- @Component({
- selector: 'app-root',
- styleUrls: ['app.component.scss'],
- template: `
- <div>
- <h1>{{user$ | async | json}}</h1>
- <div class="wrapper">
- <router-outlet></router-outlet>
- </div>
- </div>
- `
- })
- export class AppComponent implements OnInit, OnDestroy{
- user$: Observable<User>;
- subscription: Subscription;
- constructor(
- private store: Store,
- private authService: AuthService
- ) {}
- ngOnInit() {
- this.subscription = this.authService.auth$.subscribe();
- this.user$ = this.store.select<User>('user');
- }
- ngOnDestroy() {
- this.subscription.unsubscribe();
- }
- }
[Angular] Reactive Store and AngularFire Observables的更多相关文章
- angular reactive form
这篇文章讲了angular reactive form, 这里是angular file upload 组件 https://malcoded.com/posts/angular-file-uploa ...
- [Angular] Reactive Form -- FormControl & formControlName, FormGroup, formGroup & formGroupName
First time dealing with Reactive form might be a little bit hard to understand. I have used Angular- ...
- Angular Reactive Form-响应式表单验证
内建验证规则 Angular中提供了一些內建的Validators,这些验证规则可以在Template-Driven或Reactive表单中使用. 目前 Angular 支持的内建 validator ...
- Angular Reactive Forms -- Model-Driven Forms响应式表单
Angular 4.x 中有两种表单: Template-Driven Forms - 模板驱动式表单 (类似于 AngularJS 1.x 中的表单 ) 官方文档:https://v2.angul ...
- Angular Reactive Form - 填充表单模型
setValue 使用setValue,可以通过传递其属性与FormGroup后面的表单模型完全匹配的数据对象来一次分配每个表单控件值. 在分配任何表单控件值之前,setValue方法会彻底检查数据对 ...
- 手把手教你用ngrx管理Angular状态
本文将与你一起探讨如何用不可变数据储存的方式进行Angular应用的状态管理 :ngrx/store——Angular的响应式Redux.本文将会完成一个小型简单的Angular应用,最终代码可以在这 ...
- angular版聊天室|仿微信界面IM聊天|NG2+Node聊天实例
一.项目介绍 运用angular+angular-cli+angular-router+ngrx/store+rxjs+webpack+node+wcPop等技术实现开发的仿微信angular版聊天室 ...
- 2015,2016 Open Source Yearbook
https://opensource.com/yearbook/2015 The 2015 Open Source Yearbook is a community-contributed collec ...
- [AngularJS Ng-redux] Integrate ngRedux
Up to this point, we have created an effective, yet rudimentary, implementation of Redux by manually ...
随机推荐
- 【shell学习】经常使用条件推断-字符,数字,文件
IF 推断 之前也写过简单的shell脚本,也不是转职运维.和系统相关的工作比較少.所以不怎么熟练. 近期因为系统总是出现各种乱七八糟的问题,也没有人来协助.仅仅好自己写shell脚本了,都是些基础的 ...
- 5.brackets 快捷键 有大用
转自:https://blog.csdn.net/u012011360/article/details/41209223 ctrl+b 当选中一个文本时,会出现相同的文本,被高亮显示 按ctrl+b ...
- Mahout的推荐系统
Mahout的推荐系统 什么是推荐系统 为什使用推荐系统 推荐系统中的算法 什么是推荐系统 为什么使用推荐系统? 促进厂商商品销售,帮助用户找到想要的商品 推荐系统无处不在,体现在生活的各个方面 图书 ...
- Cisco Works 2000 网络管理软件安装、配置全过程
下面是在windows 2000 server 下安装ciscoworks 2000的过程.(附件中是标准avi格式文件,由于上传附件大小限制,更多内容见Sina播客) 浏览全部原创视频请见: htt ...
- Kinect 开发 —— 开发前的准备工作
Kinect SDK v1.5 支持托管语言和非托管语言 Xbox360的游戏是基于Xbox360开发工具包 (XDK)开发的,Xbox 360和Windows是两个完全不同的系统架构.使用Kinec ...
- 初识Oracle中的正则表达式
Oracle使用正则表达式离不开这4个函数: 1.regexp_like 2.regexp_substr 3.regexp_instr 4.regexp_replace
- 使用Vue动态生成form表单
form-create 表单生成器 具有数据收集.校验和提交功能的表单生成器,支持双向数据绑定和事件扩展,组件包含有复选框.单选框.输入框.下拉选择框等表单元素以及省市区三级联动,时间选择,日期选择, ...
- Myeclipse学习总结(3)——Myeclipse中的代码格式化、注释模板及保存时自动格式化
设置Myeclipse中的代码格式化.注释模板及保存时自动格式化 1:设置注释的模板: 下载此模板: codetemplates.xml This XML file does not appear ...
- _00018 Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1 分布式环境整合,Hadoop-2.X使用HA方式
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最 ...
- BZOJ1195: [HNOI2006]最短母串(Trie图,搜索)
Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. Input 第一行是一个正整数n(n<=12) ...