Angular等了三年,那个她已经来了

angular · 浏览次数 : 6

小编点评

**Angular生态的不足:** 1. **响应式系统不好用:**在使用Signal等新引入的响应式状态时,访问状态值需要像函数一样调用,这反直觉的实现方式对tsx支持不友好。 2. **大量的历史包袱,设计变更又做得扭扭捏捏:**模块之间隔离不彻底,例如NgModule与Standalone、zone.js与Singals之间的命名冲突和文件路径指定问题。 3. **缺乏模块化体系:**模块之间依赖注入和依赖查找的组合,复杂化依赖注入链,影响代码可维护性。 4. **单靠模版,支撑大型业务系统的开发,难度很大:**模版框架易于实现,但模版设计缺乏灵活性,难以满足复杂业务系统需求。 5. **ioc容器复杂,难以维护:**ioc容器需要在每个模块中配置和管理,导致代码复杂和难以维护。

正文

Angular生态丰富,功能强大,支撑了许多大型项目的开发。而且一直在前方等待着其他框架跟上。但是不得不直面的一个问题就是:“在等待其他框架跟上的这三年”,Angular在陆陆续续抛弃之前引以为豪的设计。又由于大量的历史包袱,这些设计变更又做得扭扭捏捏,做不到轻装上阵。比如NgModule之于Standalone,zone.js之于Singals,Rxjs更是一言难尽

Angular虽然有许多超前的架构设计和工程化能力,但是就目前而言,仍有以下不足:

  1. 响应式系统不好用:即便是新引入的Signal,如果要访问一个状态值,需要像函数一样调用,这是反直觉的实现方式
  2. 对tsx支持不友好:全网很难找到angular+tsx的最佳实践。单靠模版,支撑大型业务系统的开发,难度是很大的
  3. ioc容器太过繁琐:看看文档就知道了,angular劝退新人的点很多,ioc繁琐是最主要的
  4. 模块化隔离性不够好,拖泥带水:虽然angular引入了模块化概念,但是模块之间隔离不彻底。比如我在A模块实现了一个service,如果要在B模块使用,就需要明确指定service在A模块的文件路径,而不是指定一个名称就行。这样就让模块耦合很深。类似这样的设计问题还有很多

Cabloy-Front就很好的解决了angular的这些短板。Cabloy-Front是一款支持ioc容器的Vue3框架,有以下特点:

  1. 底层采用vue3的响应式系统:在ioc容器的加持下,定义响应式状态不再需要ref/reactive,也不再需要ref.value
  2. 在独立的render class中书写tsx代码,从而让tsx代码更加舒展、从容
  3. 提供了两类ioc容器:一类是全局ioc容器,可以实现pinia的能力。另一类是组件实例ioc容器,该容器与Vue组件实例绑定,在这个容器中的所有 Class 实例都可以在组件实例范围之内共享数据和逻辑
  4. 模块化体系:实现了完全隔离的模块化体系。模块作为一个相对独立的业务单元,包含各种类型的资源,包括Config配置、Constant常量、Locale国际化、Error错误异常、Component组件,等等。在跨模块访问这些资源时,是基于名称寻址,而不是基于资源的原始文件路径寻址,因此,心智负担更低
  5. 更优雅的ioc容器开发体验:采用依赖注入依赖查找相结合的方式,大量减少装饰器的使用,让代码更简洁、更优雅。优先使用依赖查找的机制可以达到化类型于无形的效果?简而言之,就是无须标注类型,却能享受到“类型约束”和“智能提示”的好处

口说无凭,我们简单看一下cabloy-front的代码风格是怎样的:

  1. 定义响应式状态

在组件中定义一个响应式变量count,并且添加两个方法修改变量

export class MotherPageCounter {
  count: number = 0;

  inrement() {
    this.count++;
  }

  decrement() {
    this.count--;
  }
}
  1. 使用响应式状态

采用tsx语法使用count

export class RenderPageCounter {
  render() {
    return (
      <div>
        <div>count(ref): {this.count}</div>
        <button onClick={() => this.inrement()}>Inrement</button>
        <button onClick={() => this.decrement()}>Decrement</button>
      </div>
    );
  }
}
  1. 逻辑抽离

将count逻辑抽离出来,创建一个Counter Bean

@Local()
export class Counter {
  count: number = 0;

  inrement() {
    this.count++;
  }

  decrement() {
    this.count--;
  }
}
  1. 在组件中注入并使用

使用装饰器函数@Use注入bean

export class MotherPageCounter {
  @Use()
  $$counter: Counter;
}

采用tsx语法使用已注入的bean实例

export class RenderPageCounter {
  render() {
    return (
      <div>
        <div>count(ref): {this.$$counter.count}</div>
        <button onClick={() => this.$$counter.inrement()}>Inrement</button>
        <button onClick={() => this.$$counter.decrement()}>Decrement</button>
      </div>
    );
  }
}

Cabloy-Front框架已开源:https://github.com/cabloy/cabloy-front

与Angular等了三年,那个她已经来了相似的内容:

Angular等了三年,那个她已经来了

“在等待其他框架跟上的这三年”,Angular在陆陆续续抛弃之前引以为豪的设计。又由于大量的历史包袱,这些设计变更又做得扭扭捏捏,做不到轻装上阵。

Angular项目简单使用拦截器 httpClient 请求响应处理

1:为啥要使用拦截器 httpClient 请求响应处理,其作用我们主要是: 目前我的Angular版本是Angular 17.3,版本中实现请求和响应的拦截处理了。这种机制非常适合添加如身份验证头、错误统一处理、日志记录等功能。 具体的操作步骤 2:注入服务:ng g s services/myh

如何在现有的Vue项目中嵌入 Blazor项目?

目前官方只提供了angular和react俩种示例,所以本教程将来讲解如何在Vue的现有项目中使用,上期已经做好了react的教材! 准备流程 Vue 项目创建流程 使用Vue创建一个Demo项目 全部选择默认No即可 然后项目名称就用demo了 npm init vue@latest cd dem

如何实现在react现有项目中嵌入Blazor?

如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只讲react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor中完成,但是我们没办法找到怎么在react中轻量级使用blazor组件,可能会有人会使用iframe

angular + express 实现websocket通信

最近需要实现一个功能,后端通过TCP协议连接雷达硬件的控制器,前端通过websocket连接后端,当控制器触发消息的时候,把信息通知给所以前端; 第一个思路是单独写一个后端服务用来实现websocket,调试成功了,后来又发现一个插件express-ws,于是决定改变思路,研究了下,最终代码如下,希

基于 Angular和Material autocomplete组件再封装的可双向绑定key-value的可输入下拉框

GitHub: https://github.com/Xinzheng-Li/AngularCustomerComponent 效果图:为了方便使用,把许多比如ADD的功能去了,可以在使用后自行实现。 调用: 1

瑞亚时间管理大师,基于 .NET 6 和 Angular 构建的在线任务管理协作平台

瑞亚时间管理大师 瑞亚时间管理大师, 是一个在线的任务管理、项目管理、 团队协作平台。瑞亚 拥有现代化的页面风格,高效、简便,同时适合个人和团队使用。 瑞亚对个人免费,提供了无限制的任务,列表,和空间。 功能预览 瑞亚时间管理大师是以任务管理为核心,还包括了看板,文档,思维导图,白板,和 OKR 目

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端框架搭建

前言 前面的章节我们介绍了一些值得推荐的Blazor UI组件库,通过该篇文章的组件库介绍最终我选用Ant Design Blazor这个UI框架作为ToDoList系统的前端框架。因为在之前的工作中有使用过Ant Design Vue、Ant Design Angular习惯并且喜欢Ant Des

Util 应用框架 UI 全新升级

Util UI 已经开发多年, 并在多家公司的项目使用. 不过一直以来, Util UI 存在一些缺陷, 始终未能解决. 最近几个月, Util 团队下定决心, 终于彻底解决了所有已知缺陷. Util 应用框架 UI 介绍 Util 应用框架 UI 建立在 Angular , Ng-Zorro, N

看看Angular有啥新玩法!手把手教你在Angular15中集成Excel报表插件

> 摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 # Angular15新特性 Angular框架(以下简称“Angular”)作为一款由谷歌开发的Web应用程序框架,其强大的依赖注入系统、可重复使用的模块化开发理念和响应式编程模式等特