angular effects简明指南

Angular信号中的Effect函数:深入理解与实践 Effect函数在Angular中的应用非常灵活,但需要谨慎使用,特别是在涉及状态更新时。通过理解Effect的工作原理和正确使用,可以有效地管理应用的状态变化,提高代码的可维护性和性能。希望这个博客能够帮助你更好地理解和应用Effect函数。 阅读详情

effect说起来概念不难,但是初期接触还是要迷糊一阵子的
目的:
为了抽取组件中的多余动作,让组件更单纯,复用性更好
方法:
为了达到以上目的,我们要先分辨出,“多余”的动作是什么?—什么是多余的 什么就是effect
说具体点儿,就是组件中 调取后台service部分的代码。
因为如果我们将service写在组件中,就会将此代码的复用性降低了,比如你在其他项目还是想利用此组件,但是另一个组件的调用后台的名称或方法并不一致,导致了组件没办法直接复用。
而有了effect的理念,我们将service方法直接抽离出来,根本不在组件中体现,这样组件就是一个很笨的组件,功能只涉及自己的业务,其他的都不管了。

下面逐行分析一下代码用法:

官方示例是相当简洁的,下面我将详细扩展说明

比如 有以下代码

//一个type
static LOGIN= 'LOGIN';
//一个action
    {
      type: LOGIN,
      payload: {
        task
      }

我们来开始写effects 其实是官方示例


@Injectable()
export class AuthEffects {
  constructor(private http: Http, private actions$: Actions) { }

  @Effect() login$ = this.actions$
      //这里 我们监听了‘LOGIN’ action ,固定写法,只要其他地方dispatch ‘LOGIN’,这边就会自动执行啦,这也是为什么effect可以抽离组件方法的原因,只要这里监听了 其他地方只要调用就会执行这边的代码
      .ofType('LOGIN')
      // 转换成 action 的 payload 数据流,这个如果你本身数据格式就是payload格式 就不用写。
      .map(toPayload) 
      //这里是重点:首先,你监听了LOGIN,一旦触发了LOGIN,这里立马开始执行switchMap,以上基本都是固定写法不用管
      //但是,这个参数payload,是通过监听type,找到了你的专属此type的action,然后将其中的payload返回了回来,作为参数。它可能是一个值,或者一个对象,不过我们关心的是它是可以取出来的。
      .switchMap(payload => this.http.post('/auth', payload.task)
        // 下面是从服务器返回来的res了
        //又是重点来了----后面的运行,意思是直接dispatch了,effect已经帮你写好了,你不用再写dispatch了,即----我们dispatch了LOGIN_SUCCESS,让整体state发生了变化
        .map(res => ({ type: 'LOGIN_SUCCESS', payload: res.json() }))
        // 失败的话  也是dispatch
        .catch(() => Observable.of({ type: 'LOGIN_FAILED' }))
      );
}

如何运用呢?直接在某处写:

this.store.dispatch({
      type: LOGIN,
      payload: {
        task
      });

总结

再捋一遍,store dispatch 了 ‘LOGIN’ action,effect 监听了此动作,则开始自动执行 switchMap 方法,将 payload 作为参数传递进去,开始从后台调取数据,返回值直接作为新的 action 的 payload , dispatch 出去,更改 store 的 state 。

这么做的理由
就是组件只是在dispatch action,而具体发生了什么,这个组件根本不关心。
这样做的好处
可以想象,你和队员合作,他可以独立去开发effect,你来写组件,你们的对接口就是action,具体实现已经分离。

说到底,这也体现了angular的大团队协作思维,虽然学习代价确实高了些。。。。

ng-effects:AngularReact系统。 https AngularReact系统。 基于Vue Composition API。 :memo: :high_voltage: :star: 笔记 寻找先前的(9.0.x)文件吗? 。 @ Component ( { selector : "app-root" , inputs : [ "count" ] , outputs : [ "countChange" ] } ) export class AppComponent extends defineComponent ( ( ) => { const count = ref ( 0 ) const countChange = new EventEmitter < number> ( ) function increment ( ) { count . value += 1 } watchEffect 立即下载

相关推荐

无法联网的情况下,dbeaver离线安装数据库驱动-clickhouse

无法联网的情况下,dbeaver离线安装数据库驱动-clickhouse

u012831187的博客 1万+

代码即逻辑 -- 聊聊 Effects 及在 Angular 中的应用

大概去年9月左右,看过 Cycle.js 创作者 André Staltz 的一个视频:讲为什么 React 并不是一个响应式的框架,同时介绍了 Cycle.js。当时就觉得这个思路好牛叉,但一直有点似懂非懂。最近由于工作需要,在 Angular 中使用了 @ngrx/effects (这个是借鉴了 Cycle.js 的思路,把这种思路应用在 Angular 中),对这个模式有了些粗

MiuWing的博客 943

【OpenCV】手眼标定实战:从原理到calibrateHandEye的完整实现

本文详细解析了机器人视觉中的手眼标定原理与实战,重点介绍了如何使用OpenCV的calibrateHandEye函数实现从数据采集到结果验证的完整流程。文章深入剖析了AX=XB核心方程,区分了眼在手上与眼在手外两种配置,并提供了详细的代码示例与避坑指南,帮助开发者精准建立相机与机械臂末端的坐标转换关系,是机器人精准抓取的关键技术。

weixin_29046611的博客 507

Angular重要概念

Angular概念 不能把Angular当作黑盒来使用,要充分了解它的内部结构。 依赖注入 1、 什么是依赖注入? 2、依赖性注入框架 Angular 在angular中,我们只要记住依赖注入的三种角色:<font color=red size=4>使用者、服务(依赖对象)及注入器(Injector)</font> @Injectable是@Component的子...

极客神殿 862

广联达Linkworks ArchiveWebService XML实体注入漏洞复现

广联达 LinkWorks /GB/LK/Document/ArchiveService/ArchiveWebService.asmx接口处存在XML实体注入漏洞,未经身份认证的攻击者可以利用此漏洞读取系统内部敏感文件,获取敏感信息,使系统处于极不安全的状态。

0xSec 2719

项目篇:移动平台机械臂视觉定位抓取实施(基于ROS架构)

ROS包内容: 这篇日志的目的是快速项目实施,所以详细的部分会不断补充。 1、相机采集包(创建抓取图像服务,单张) Realsense Camera(微软深度摄像头,官方提供ros包) Pylon Camera(basler相机,官方提供ros包) 2、定位算法包(抓取图像,定位标志物) Aruco_ros (二维码定位,官方提供ros包) Apriltag (二维码定位,官方提供ros包)...

南北粉面馆 6047

ngrx 入门

什么是ngrx ngrx是Angular基于Rxjs的状态管理,保存了Redux的核心概念,并使用RxJs扩展的Redux实现。使用Observable来简化监听事件和订阅等操作。 在看这篇文章之前,已经假设你已了解rxjs和redux。 有条件的话请查看官方文档进行学习理解。 所需包 ng add方式,会自动生成所需文件并在app.module.ts中导入,直接启动项目即可,不报错 ng add...

weixin_42227767的博客 4816

自动驾驶大模型---小米&华科的ORION端到端方案

本文介绍了小米汽车与华中科技大学联合开发的ORION自动驾驶端到端方案。该框架创新性地将视觉语言模型(VLM)与自动驾驶系统结合,包含QT-Former特征提取模块、大语言模型(LLM)推理模块和生成式规划器三大核心组件。通过视觉感知与语言理解的深度融合,ORION能更准确地理解人类指令并生成合理轨迹,同时提升系统的可解释性。实验证明,该方案在准确性、泛化能力和决策透明度方面均有显著优势。ORION框架为自动驾驶技术提供了新思路,有望推动行业向更安全、智能的方向发展。

智能汽车人的博客 2004

带你初步了解Angular的全局状态管理ngrx

带你初步了解angular的全局状态管理ngrx

百世经纶『一页書』 3597

基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程

利用STM32单片机移植NES游戏模拟器,完成NES游戏开发,可以玩标准的NES游戏,已测试超级玛丽、魂斗罗之类的都可以正常运行。

4万+

Simulink进行无人机飞行力学建模与仿真

摘要:本文详细介绍了使用MATLAB/Simulink进行四旋翼无人机飞行力学建模与仿真的步骤。内容包括准备工作、动力学方程概述、模型构建(使用State-Space或Simscape Multibody)、可选控制器设计、仿真参数配置及结果分析。教程强调理解飞行力学原理和坐标系转换的重要性,建议根据需求选择模型复杂度,并推荐查阅学术文献获取更深入的建模方法。通过本教程,读者可掌握无人机动力学建模基础,为控制系统开发和性能优化奠定基础。

amy_mhd的博客 271

深度解析angular-contacts-app-example的NgRx Effects:HTTP与Socket.IO副作用隔离完全指南

angular-contacts-app-example 是一个基于 Angular + NgRx + NestJS 的全栈联系人 PWA 示例项目。它的最大亮点,就是把 **HTTP 请求** 和 **Socket.IO 实时推送** 这两类副作用(Side Effects)统一收敛到 [NgRx Effects](https://ngrx.io/guide/effects) 中集中管理。本文将

gitblog_00519的博客 940

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

angular-contacts-app-example的NgRx分形状态管理:懒加载Reducer与Effects实战

angular-contacts-app-example 是一个基于 Angular 9 + NgRx 的全栈联系人管理 PWA 示例应用。它用「根 Reducer + 懒加载 Feature Reducer」的分形状态管理方式组织 NgRx 状态,并通过 Effects 统一管理 HTTP 与 Socket 副作用,是学习 NgRx 模块化拆分的最佳参考。 ## 这个项目是做什么的? 这是一

gitblog_00852的博客 459

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ngxtension RxJS 与 Effects:如何在 Angular 中优雅管理副作用

在 Angular 应用开发中,副作用管理是确保应用稳定性和性能的关键环节。ngxtension-platform 作为一个强大的 Angular 工具库,提供了多种简洁高效的副作用管理方案,让开发者能够轻松处理数据获取、状态更新等异步操作。本文将详细介绍 ngxtension 中 RxJS 与 Effects 相关的实用工具,帮助你在 Angular 项目中实现优雅的副作用管理。 ## 为什么

gitblog_00557的博客 386

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

安装与配置 @ngrx/schematics:为 Angular 项目启用 NgRx 代码生成脚手架

`@ngrx/schematics` 是 NgRx 官方提供的 Angular CLI 代码生成脚手架库,用于在 Angular 应用中快速生成 store、effects、reducer、selector 等 NgRx 状态管理代码。本文以官方安装文档为核心,结合当前仓库(NgRx 开源平台项目)中的源码实现,完整讲解 `ng add` 一键安装、手动安装、依赖补齐以及安装验证四个环节,帮助读者

gitblog_00127的博客 614

如何用jasmine-marbles快速测试NgRx Effects?angular-contacts-app-example单元测试完整指南

**angular-contacts-app-example** 是一个基于 Angular + NgRx + NestJS 的全栈 PWA 通讯录应用,使用 `@ngrx/effects` 管理 HTTP 请求和 WebSocket 等副作用。本文以该项目为蓝本,手把手教你如何用 **jasmine-marbles** 库对 NgRx Effects 编写高效、可读性强的单元测试。 ## 为什

gitblog_01067的博客 892

Angular状态管理实战:ngrx核心原理与工程落地指南

状态管理是前端应用架构的核心命题,尤其在中大型Angular项目中,跨组件通信、异步操作与多条件分支交织导致状态协同失序。ngrx并非简单复刻Redux,而是深度融合Angular依赖注入、RxJS响应式流与变更检测机制的原生状态解决方案。其核心价值在于实现状态变更的可追溯性、可预测性与可回放性,通过Store统一管控、Actions明确意图、Reducers纯函数保障一致性、Effects隔离副作用、Selectors高效订阅,显著提升团队协作效率与线上问题定位能力。本文聚焦真实业务场景,覆盖从选型判断、

weixin_30887919的博客 404

全栈Angular PWA应用angular-contacts-app-example:用NgRx + NestJS打造离线通讯录的完整教程

**angular-contacts-app-example** 是一个全栈 Angular PWA(渐进式 Web 应用)通讯录示例项目,前端基于 Angular 9 + NgRx Store/Effects/Entity 管理状态,后端由 NestJS 提供 REST 与 WebSocket 服务。它支持离线访问、实时同步联系人,是学习现代 Angular 工程化开发的优秀开源教程。 ##

gitblog_01098的博客 997

NgRx V8 迁移升级完全指南:破坏性变更详解与 Angular CLI 自动迁移实战

本指南以 NgRx V8 官方迁移文档(`projects/www/src/app/pages/guide/migration/v8.md`)为骨架,逐一剖析从 V7 升级到 V8 时的依赖基线、`ng update` 自动迁移机制,以及 `@ngrx/store`、`@ngrx/effects`、`@ngrx/router-store`、`@ngrx/entity`、`@ngrx/store-d

gitblog_00457的博客 910

ngrx/store effects 列表展示

开发流程: 开始-> 编写数据模型 ->编写action ->编写redurces并配置到相应module ->编写services ->编写effects并配置到相应module ->创建组件 ->组件绑定数据模型 ->渲染 第一步:编写数据模型(app/models/user.ts) export class User { id: number; name: string; } 第二步:编写action(app/ac...

ctf_0226的博客 246

ngrx/store effects  计数器

本教程案例github:https://github.com/axel10/ngrx_demo-counter-and-list angular2+的学习成本应该是三大框架中最高的一个,教程及案例稀缺,流程较为复杂,这里我用计数器和在线获取用户数据并渲染成列表这两个案例来帮大家快速入手angular2+。 在开始之前,希望你能先掌握rxjs以及typescript,否则对其中的一些写法可能会觉得难以理解。 rxjs英文向导:http://reactivex.io/rxjs/manual/...

ctf_0226的博客 432

10分钟快速跑通angular-contacts-app-example:从零启动全栈Angular通讯录应用的保姆级指南

angular-contacts-app-example 是一个基于 **Angular + NgRx + NestJS** 的全栈通讯录(Contacts)示例应用,支持 PWA 离线安装、HTTP 与 WebSocket 实时同步。本教程带你从零开始,10分钟内把它完整跑起来 🚀 ## 一、它能做什么?为什么值得学? 这个项目是一个「全家桶」式的学习样板: - 📇 **通讯录 CRU

gitblog_00156的博客 991

Angular 联系人应用秒级更新原理:angular-contacts-app-example 如何用 Socket.IO 实现多端实时同步

angular-contacts-app-example 是一个开源的 **全栈 Angular 联系人管理 PWA 应用**,基于 NgRx 状态管理 + NestJS 后端,核心亮点正是通过 **Socket.IO 实时同步**,让多台设备上的联系人列表无需刷新、秒级更新。下面用通俗的方式拆解它的实时同步原理,并教你快速在本地跑起这个 Angular 实时协作演示。 ⚡ 一句话看懂核心:任何

gitblog_00923的博客 643

为什么选择angular-webpack-starter?2023年最值得推荐的Angular开发脚手架对比

在Angular生态系统中,选择一个合适的开发脚手架是项目成功的关键第一步。**angular-webpack-starter**作为一款功能全面的Angular 6和Webpack 4启动模板,为开发者提供了一个完整的企业级解决方案。本文将深入分析这个强大的Angular开发脚手架,并与其他主流方案进行对比,帮助你做出明智的技术选型决策。🚀 ## 📊 核心特性概览:一站式开发体验 **a

gitblog_00994的博客 750
上一篇: node环境升级
下一篇: 在webstorm中如何关联github项目
railsbug
博客等级 码龄14年 18粉丝 101原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值