ngrx/store effects 使用总结1:计数器
2018-06-24 01:44:26来源:未知 阅读 ()
本教程案例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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:tab栏切换原理
- ext中store.load跟store.reload的区别示例介绍 2019-12-08
- 前端笔记之Vue(五)TodoList实战&拆分store&am 2019-05-22
- RESTORE DATABASE命令还原SQLServer 2005 数据库 2018-06-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash