首页 > 其他分享 >什么是 Angular Composable 概念

什么是 Angular Composable 概念

时间:2023-05-29 14:23:23浏览次数:45  
标签:概念 composable update Angular Signals Composable document event

在这里插入图片描述

我们都知道 Lodash,它是一个在项目中重用无状态逻辑的库。那么,如果在 Angular 项目中我们有一个类似的工具包来重用有状态逻辑呢?

Composables 并不是一个新的概念,它是来自 Vue.js 的一个概念。我在这篇博客中使用的许多示例和想法直接来自 Vue.js Composables 文档。

在版本 16.0.0-next.0 中,Angular 团队引入了 Signals 的实现,Signals 是一种反应性的基本组件,可以在 Angular 中提供精细的反应性能力。随着这样的重大变化,还考虑到 Angular 团队在最新版本中引入的其他非常有用的功能,比如 inject 函数或 DestroyRef 的概念,不可避免地会出现新的模式。本文试图在 Angular 的上下文中探索这个模式。

在 Angular 自身中,我们已经看到了我们可以称之为“功能型服务(Functional Services)”的过渡。它始于版本 14.2.0 中功能型守卫(functional guards)和解析器(resolvers)的引入,继续于版本 15.0.0 中功能型拦截器(functional interceptors)的引入。但是什么是 Angular Composable,为什么以及如何在项目中使用它?

什么是 Angular Composable?

在 Angular 应用程序的上下文中,一个 composable 是一个使用 Signals API 封装有状态逻辑的函数。这些可组合函数可以在多个组件中重复使用,可以相互嵌套,并且可以帮助我们将组件的有状态逻辑组织成小型、灵活和简单的单元。

与我们创建 util 函数以在组件之间重用无状态逻辑的方式相同,我们创建 composable 以共享有状态逻辑。

但是让我们看看在 Angular 应用程序中如何编写一个 composable。在下面的示例中,我没有使用 Angular Signals RFC 中提议的 API。当此 API 的所有功能就位时(例如应用程序渲染生命周期钩子,基于 Signal 的查询),我们将能够以更好的方式编写这些可组合函数,并能够为它们提供更多功能。

让我们从一个非常简单的示例开始。

Mouse Tracker Example

使用 Signals 在 Angular Component 里实现 mouse tracking 功能:

@Component({
  standalone: true,
  template: ` {{ x() }} {{ y() }} `,
})
export class MouseTrackerComponent implements AfterViewInit, OnDestroy {
  // injectables
  document = inject(DOCUMENT);

  // state encapsulated and managed by the composable
  x = signal(0);
  y = signal(0);

  ngAfterViewInit() {
    document.addEventListener('mousemove', this.update.bind(this));
  }

  // a composable can update its managed state over time.
  update(event: MouseEvent) {
    this.x.update(() => event.pageX);
    this.y.update(() => event.pageY);
  }

  ngOnDestroy() {
    document.removeEventListener('mousemove', this.update.bind(this));
  }
}

可以对其重构,增加通用性:

// mouse-tracker.ts file
export function useMouse() {
  // injectables
  const document = inject(DOCUMENT);

  // state encapsulated and managed by the composable
  const x = signal(0);
  const y = signal(0);

  // a composable can update its managed state over time.
  function update(event: MouseEvent) {
    x.update(() => event.pageX);
    y.update(() => event.pageY);
  }

  document.addEventListener('mousemove', update);

  // lifecycle to teardown side effects.
  inject(DestroyRef).onDestroy(() =>
    document.removeEventListener('mousemove', update)
  );

  // expose managed state as return value
  return { x, y };
}

其他 Component 也可以重用了:

@Component({
  standalone: true,
  template: ` {{ mouse.x() }} {{ mouse.y() }} `,
})
export class MouseTrackerComponent {
  mouse = useMouse();
}

标签:概念,composable,update,Angular,Signals,Composable,document,event
From: https://www.cnblogs.com/sap-jerry/p/17440282.html

相关文章

  • mongodb 概念
    下表将帮助您更容易理解Mongo中的一些概念:SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引tablejoins 表连接,MongoDB不支持primarykeyprimarykey主键,MongoDB自动......
  • 【跨境概念】SKU&SPU&SKC
    SKU SKU=stockkeepingunit(库存量单位),SKU即库存进出计量的单位,可以是以件、盒、个、托盘等为单位。电商中的SKU是用来定价和管理库存的,是指一款商品,每款都有出现一个SKU,便于电商品牌识别商品,避免混淆与发错货。比如一款商品多色,则是有多个SKU,iPhone14黑色256GB就是一个SKU。......
  • 页面各种布局概念与区别--静态布局、自适应布局、流式布局、响应式布局、弹性布局等
    @目录静态布局(StaticLayout)流式布局(LiquidLayout)自适应布局(AdaptiveLayout)响应式布局(ResponsiveLayout)响应式布局,自适应布局,流式布局总结和比较弹性布局(rem/em布局)响应式和弹性布局之间的对比总结静态布局(StaticLayout)即传统Web设计,网页上的所有元素的尺寸一律使用px作为......
  • 系统工程(十一) 信息化的概念
    信息化是在国家宏观信息政策的指导下,通过信息技术开发、信息产业的发展、信息人才的配置,最大程度利用信息资源满足全体社会的信息需求,加速社会各个领域共同发展以推进信息社会的过程信息化的主体是全社会成员(国家、企业、团体、个人),时域是一个长期过程,空域是经济和社会的一切领域......
  • 数学巧思笔记(证明+概念组合)
    利用夹逼准则+三角函数公式,求证$\lim\limits_{x\to0}\frac{sinx→三角形}{x→角度}=1$......
  • 数据库基本概念
    数据库(Database),是指按照一定的数据模型组织、描述和存储数据的集合。可以理解为是一个可存储、管理和检索数据的仓库。数据库管理系统(DatabaseManagementSystem,简称DBMS),是指管理和操作数据库的软件系统,通常包括数据定义、数据操作和数据控制三部分,常用的DBMS有Oracle、MySQL、SQ......
  • 04、Etcd中常见的概念
    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢。上一章节,我们学习了Etcdctl的使用,从中窥探了Etcd的强大之处。从这一节开始,后面的内容基本上都是偏理论的东西,争取在看完这一系列文章后,能够对Etcd有一个入门的了解,这样在日常开发过程中,能够对Etcd底层的原理......
  • Doris(二) -- 基本概念和数据表模型
    字段类型数据类型字节范围TINYINT1字节-2^7+1~2^7-1SMALLINT2字节-2^15+1~2^15-1INT4字节-2^31+1~2^31-1BIGINT8字节-2^63+1~2^63-1LARGEINT16字节-2^127+1~2^127-1FLOAT4字节支持科学计数法DOUBLE......
  • LangChain学习笔记1:基本概念
    GPT:x中之事,事无大小,悉以咨之概念加载器(Loader)从某种介质中获取数据,即加载。文档(Document)数据转换成文档进行处理。类比数据库转换成记录……文本分割(TextSpltter)LLM一次处理的数据有限,分割成多批进行处理。向量数据库(Vectorstores)文档转换成向量,把文档存入到向量数据库,自动转换成......
  • 1. 王道OS-操作系统的概念、功能
    1.操作系统是指控制和管理整个计算机的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;他是计算机系统最基本的系统软件; 操作系统需要向其他软件提供服务;是所有软件(系统资源)的manager; 提供的功能:1.处理机管理......