最近,关于JavaScript Frameworks的对话已由流行名称(例如React(技术上是库),Next.js,Svelte,Svelte,Angular等)主导。
当我第一次遇到Aurelia时,我的反应是:“那是什么?”但是经过两年的工作,我现在相信它是那里最好的框架之一,即使不是最好的框架。
为什么我这样认为?让我解释一下。我从react.js过渡到Aurelia,最初,我认为这只是另一个JavaScript框架。但是,随着我更深入的研究,我开始意识到它的真正潜力和力量。
1。事件聚合
首先是事件聚合器,如果您在C#生态系统中工作,您可能会熟悉这一概念,但是以下是Aurelia的工作方式:
事件聚合器的功能与C#中常用的基于事件的消息模式相似。这是一个酒吧/子系统,可让您在Aurelia应用程序中发布并订阅自定义事件。
这有助于您应用程序的不同部分之间的脱钩通信。就像在C#中一样,事件聚合器或调解器用于简化事件处理,Aurelia的事件聚合器被框架本身利用,以在应用程序生命周期的各个阶段和特定操作中发布事件。 导入{ieventaggregator,从'aurelia''; lanesolve}; 导出类FirstComponent { ReadOnly EA:ieventAggregator = resolve(ieventaggregator); 边界() { this.ea.publish('ea_channel',“有效载荷”) } }
导入{ieventaggregator,从'aurelia''; lanesolve}; 导出类secondcomponent { ReadOnly EA:ieventAggregator = resolve(ieventaggregator); 边界() { this.ea.subscribe('ea_channel',有效载荷=> { //在此回调的内部做事 }); } }
这样,我们可以毫不费力地实现事件驱动的体系结构,解决和解决与React和类似框架经常遇到的耦合头痛。
2。 依赖项注入
import { IEventAggregator, resolve } from 'aurelia'; export class FirstComponent{ readonly ea: IEventAggregator = resolve(IEventAggregator); bound() { this.ea.publish('ea_channel', ‘PAYLOAD’) } }Aurelia提供了一个功能强大且灵活的DI系统,可简化接线应用程序的不同部分。借助Aurelia的DI,管理和注入依赖项变得无缝,导致更清洁,更可维护的代码。
import { IEventAggregator, resolve } from 'aurelia'; export class SecondComponent { readonly ea: IEventAggregator = resolve(IEventAggregator); bound() { this.ea.subscribe('ea_channel', payload => { // Do stuff inside of this callback }); } }此外,此方法使测试驱动的开发(TDD)变得更加容易,因为它可以直接对单个组件进行嘲弄和测试,而无需复杂的设置或紧密耦合的依赖项。
3。动态构图
aurelia的元素可以使视图和视图模型的动态组成。它的作用为自定义元素,但不需要特定的标签名称,可以灵活和可重复使用的UI组件。 在使用的视图模型中,您可以访问Aurelia的所有标准生命周期事件,以及可用于初始化或传递参数到视图模型的附加激活方法。 在实践中使用
主应用程序
传递parameters
:the Model.bind属性将参数传递到动态组成的视图模型中的激活方法。
[2我喜欢Aurelia 2的原因之一是通过MVVM(Model-view-viewModel)模式对关注点的干净分离。 view :UI结构完全与逻辑解耦。它只需绑定到ViewModel即可显示数据并捕获用户交互。
:这是所有逻辑发生的地方。它可以控制数据,处理业务规则并更新视图,而不必担心它的显示方式。
模型
此分离使应用程序高度模块化,更易于维护,并且更易于测试,从而可以更灵活,可扩展的代码。
结论
Main Application
Aurelia 2具有有助于构建干净,可扩展和可维护的应用程序的功能。 要获得完整的图片并深入研究其功能,我强烈鼓励您探索Aurelia 2文档,以提供更全面的理解。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3