本教程案例github:https://github.com/axel10/ngrx_demo-counter-and-list

angular2+ 的学习成本应该是三大框架中最高的一个,教程及案例稀缺,流程较为复杂,这里我用计数器和在线获取用户数据并渲染成列表这两个案例来帮大家快速入手angular2+。

在开始之前,希望你能先掌握rxjs以及typescript,否则对其中的一些写法可能会觉得难以理解。

rxjs英文向导:http://reactivex.io/rxjs/manual/overview.html

rxjs中文向导:http://cn.rx.js.org/manual/overview.html

typescipt w3cschool教程:https://www.w3cschool.cn/typescript/

在开始之前,需要先安装@ngrx/store和@ngrx/effects

yarn add @ngrx/store @ngrx/effects

本教程使用的 ngrx/effects和ngrx/store版本均为5.2.0。

先来大致说一下开发流程:

开始 -> 编写数据模型 -> 编写action -> 编写redurces并配置到相应module -> 编写services -> 编写effects并配置到相应module -> 创建组件 -> 组件绑定数据模型 -> 渲染

我们先完成计数器案例。此案例由于没有异步任务,所以可以省略掉services和effects。

从创建项目到启动初始页面之间的步骤这里就不讲了。注意style要使用scss。还有不要使用cnpm安装包。改用yarn或者npm,这样后期使用不容易报错。

ng new your-project --style scss

第一步:编写数据模型(app/models/num.ts)

export class Num {

  count: number;

  constructor(num: number) {

    this.count = num;

  }

}

第二步:编写action(app/actions/num.ts)

import {Action} from '@ngrx/store';

export enum NumActionType {

  Add = 'ADD'

}

export class ADD implements Action {

  readonly type = NumActionType.Add;  //固定写法,必须叫type

}

第三步:编写redurcers(app/redurces/modelNum.ts)

import {Num} from '../models/num';

import {Action} from '@ngrx/store';

import {NumActionType} from '../actions/num';

export const modelNum = (state: Num = new Num(0), action: Action) => {       

  switch (action.type) {

    case NumActionType.Add:

      state.count++;

      return state;

    default:

      return state;

  }

};

不要忘记配置redurcer(app/app.module.ts)

  imports: [

    BrowserModule,

    RouterModule.forRoot(routes),

    StoreModule.forRoot({ modelNum}),      //配置redurcer

  ],

第四部:创建组件

ng g component model-num

第五步:组件绑定数据模型(连带完成第六步)

组件html文件:

<div>

  <input (click)="add()" value="+" type="button">

  <p>{{num.count}}</p>

  <input value="-" type="button">

  <br/>

  <a routerLink="/list">to list demo</a>

</div>

组件ts文件:

import {Component, OnInit} from '@angular/core';

import {Num} from '../models/num';

import {Store} from '@ngrx/store';

import {NumActionType} from '../actions/num';

@Component({

selector: 'app-model-demo',

templateUrl: './model-demo.component.html',

styleUrls: ['./model-demo.component.scss']

})

export class ModelDemoComponent implements OnInit {

constructor(private _store: Store<any>) {

this._store.select('modelNum').subscribe(mNum => {    //涉及到rxjs。

this.num = mNum;

console.log(mNum);

});

}

public num: Num;

public add() {

console.log('add');

this._store.dispatch({          //调用dispatch触发添加redurces

type: NumActionType.Add

});

}

ngOnInit() {

}

}

完成相应的路由配置后,计数器案例完成。

现在开始案例2:在线获取用户列表并展示。

http://www.cnblogs.com/axel10/p/8589139.html

ngrx/store effects 使用总结1:计数器的更多相关文章

  1. ngrx/store effects 使用总结2:列表展示

    第一个计数器案例:http://www.cnblogs.com/axel10/p/8589122.html 完成了计数器案例后,现在开始比较能够完整的展示angular2+开发流程的案例:在线获取用户 ...

  2. [Angular2] @Ngrx/store and @Ngrx/effects learning note

    Just sharing the learning experience related to @ngrx/store and @ngrx/effects. In my personal opinio ...

  3. [Angular 2] ngrx/store

    @ngrx/store builds on the concepts made popular by Redux and supercharges it with the backing of RxJ ...

  4. [Angular 2] Using ngrx/store and Reducers for Angular 2 Application State

    ngrx/store is a library that simplifies common RxJS patterns for managing state and gives you an eas ...

  5. NgRx/Store 4 + Angular 5使用教程

    这篇文章将会示范如何使用NgRx/Store 4和Angular5.@ngrx/store是基于RxJS的状态管理库,其灵感来源于Redux.在NgRx中,状态是由一个包含action和reducer ...

  6. Angular应用架构设计-3:Ngrx Store

    这是有关Angular应用架构设计系列文章中的一篇,在这个系列当中,我会结合这近两年中对Angular.Ionic.甚至Vuejs等框架的使用经验,总结在应用设计和开发过程中遇到的问题.和总结的经验, ...

  7. [Angulalr] Speed Up Reducer Development Using Ngrx Schematics

    When we use NGRX, we need to create some bolipates. Now with Angulalr6, we can use CLI to generate t ...

  8. [Angular] Improve Server Communication in Ngrx Effects with NX Data Persistence in Angular

    Communicating with a remote server via HTTP presents an extra level of complexity as there is an inc ...

  9. [Angular] How to get Store state in ngrx Effect

    For example, what you want to do is navgiate from current item to next or previous item. In your com ...

随机推荐

  1. CSS布局(六) 对齐方式

    一.水平居中: (1). 行内元素的水平居中? 如果被设置元素为文本.图片等行内元素时,在父元素中设置text-align:center实现行内元素水平居中,将子元素的display设置为inline ...

  2. FFMpeg for PHP

    PHP使用FFMpeg来转换视频格式.Github上搜索FFMPEG,到https://github.com/PHP-FFMpeg/PHP-FFMpeg. For Windows users : Pl ...

  3. java字符串以及字符类型基础

    介绍一下java字符集和字符的编码方式, 首先要区分一下字符集和字符编码.所谓的字符集 类似于unicode,GB2312,GBK,ASCII等等.因为一开始只有26个英文字母需要 编一下号.所有用下 ...

  4. onCreate源码分析

    原文地址Android面试题-onCreate源码都没看过,怎好意思说自己做android Activity扮演了一个界面展示的角色,堪称四大组件之首,onCreate是Activity的执行入口,都 ...

  5. mysql 学习心得1

    1由于不靠这玩意吃饭 估计不准备精读 顺便中文版也不用担心翻译问题 科科 大致翻了下=,= mysql的感觉怎么就是背命令.... 2DDL语句 定义数据 创建删除修改 create drop alt ...

  6. POJ - 1321 dfs [kuangbin带你飞]专题一

    枚举行和列即可,当前已经放下cnt个棋子,当前已经搜索到第r行,如果 n - r + cnt  < k 直接退出,因为后面无法放下剩下的棋子. AC代码 #include<cstdio&g ...

  7. Vue.directive 自定义指令的问题

    1.今天复习一下Vue自定义指令的代码,结果出现一个很无语的结果,先贴代码. 2. <div id="example" v-change-by="myColor&q ...

  8. Ambari安装小记

    在Ambari配置过程中,组件的定制与分配很重要

  9. C#访问修饰符(public,private,protected,internal,sealed,abstract)

    为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...

  10. BIOS基础

    Basic Input Output System 基本输入输出系统   固化到主板上-个 ROM芯片上的 程序   为计算机提供最底层.最直接的的硬件设置和控制   以上来自百度   不讨论时软件还 ...