跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)
SEO Title

At the time of writing this article, angular just published its first release candidate version of v16. There are a lot of features/changes coming with this version. Much more than we have seen in any previous major release (of course, not considering angular to angular 2). Angular is seeing a kind of renaissance, and v16 is just the beginning. These are some of the prominent changes coming in this release.

ngcc is gone

Angular moved from its old view engine to ivy in v9. To support libraries which were still based on the old view engine, Angular Compatibility Compiler (ngcc) was introduced. In v16 ngcc has been removed along other all other view enginer related codes. As a result, angular bundle side should reduce as well as Angular View Engine libraries can no longer be used in v16+. Such libraries were not officially supported, but this is a hard break in compatibility.

With this, the transition of angular from view engine to ivy is complete.

Binding router information to component inputs

With this feature, the following router data will be available in the component directly as input. So, instead of using ActivatedRoute to get these values, we can use inputs. These can potentially remove a lot of boilerplate code from our application

  • Router data
  • Resolved router data
  • params
  • queryParams
// Current approach, which would still work
@Component({
  ...
})
class SomeComponent {
  route = inject(ActivatedRoute);
  data = this.route.snapshot.data['dataKey'];
  params = this.route.snapshot.params['paramKey']
}

//New approach
@Component({
  ...
})
class SomeComponent {
  @Input() dataKey: string;
  @Input() paramKey: string;
  
  //or
  @Input() set dataKey(value: string){
    //react to the value
  };
  @Input() set paramKey(value: string){
    //react to the vaue
  };
}

https://github.com/angular/angular/pull/49633

takeUntilDestroyed and DestroyRef

Angular has been slowly moving toward enabling a more functional approach of writing code. One feature in this direction is the introduction of DestoryRef and takeUntilDestoryed rxjs operator. These are replacement for ngOnDestroy lifecycle hook. Because ngOnDestroy is tied to classes, we can’t use it in functions, if ever we want to.

@Component({})
class SomeComponent {
  destroyRef = inject(DestroyRef);
  store = inject(Store);
  user
  constructor() {
    const sub = this.store.select(getUser()).subscribe((user) => {
      this.user = user    
    });
    destoryRef.onDestroy(() => {
      sub.unsubscribe()
    })
    

    //OR

    const sub = this.store.select(getUser()).pipe(takeUntilDestroyed())
      .subscribe((user) => {
      this.user = user    
    });
  }
}
  

takeUntilDestroyed operator can only be used in constructor context. To use it outside constructor we need to pass destroyRef as an argument.

This feature is internally used for cleaning up signal effects, hence no manual cleanup is required unlike subscriptions in rxjs. We’ll see more about them later

Required input

feat(compiler): add support for compile-time required inputs by crisbeto · Pull Request #49304 ·…

Adds support for marking a directive input as required. During template type checking, the compiler will verify that…

github.com

In react and other frameworks, we can pass props to components. There we can mark some of these props as required, and if they are not passed, typescript would throw error. Developers sourly missed this feature in angular.

There are a lot of use cases where a component requires input to serve its purpose. Without this input being passed from the parent, component may not work as intended. Currently, there are some hacky ways to enforce that inputs are getting passed to the component. But this feature brings this much requested feature in angular.

@Component({})
class SomeComponent {
  @Input({required: true}) someRequiredInput;
}

When input is marked as required, and it’s not passed in the template from the parent, compilation error will be thrown.

Note that this does not work for routed component and dynamic component. It only works for component added in the template directly

Esbuild dev server

Experimental support for ng build using esbuild is already available. In v16, support for ng serve using esbuild is also added. It is still experimental and some more performance related improvements and optimisations are to be made, but it already enables a much faster startup time (at least 2 times) than webpack implementation.

To enable this we need to change "@angular-devkit/build-angular:browser" to "@angular-devkit/build-angular:browser-esbuild"

Signals

If you are an angular developer and you have not been living under a rock, you would know about this one. Signals are the new reactive primitive provided by angular, which will help framework track changes to its model. This article can provide more detail of signal, its api and how it compares to rxjs. The following are benefits that signals promises to bring

  • Make angular simple: This reactive primitive can replace rxjs in most cases and reduce the complexity of the application.
  • Fine grained reactivity: Angular can become much more performant with signals. Because signals provide exact models which has changed, angular can do fine grained updated to the template instead of dirty checking the whole application.
  • Less concepts to learns: With signal component (coming in v17), developers needs to worry less about any performance related issue that can come due to nonoptimal code they write. Concepts like changeDetectionStrategy , onChanges lifecycle hook, even pipe to some extend will become unnecessary. It would get harder for developers to make mistakes which might hamper the performance of their application.
  • Zone-less application: Zone currently helps angular to know if something has changed and trigger change detection for the the whole application. zone monkey patches browser api to give signals (pun intended) to angular that something has changes. But it does not tell the framework what has changed. Also its adds to the bundle size and initial startup time of the application. Signals would make it possible for framework to know which exact model has changed. This enables us to have zone-less application

Angular also provides interoperability with Rxjs, which the current reactive library we use in angular. Using toSignalobservable can be easily converted to signal and using toObservable signal can be converted back to observable. This would allow us to incrementally start migrating things to signal from Rxjs, if we want to take advantage of signals.

SSR with hydration

This was a huge feature request from angular developers for a very long time. Without this, lot of developers who wanted to build end-user-facing application where initial startup time and SEO is very important, withheld from using angular.

Angular universal provided some level Server Side Rendering support, which only supported destructive hydration of the application. This leads to janky user experience for the users. With v16, angular would now enable real (non-destructive) hydration of server rendered application. This along with http request caching, the first render time should come down quite a lot and web vitals will improve for angular applications.

Conclusion

v16.0.0 should be launching sometime in May (May 4th is my guess). If you are an angular developer, or considering angular for your next project, knowing these new features are essential. Some of these are long standing features request from the community. Some features (signal, and SSR) bring Angular to par with other modern frameworks. With these features and more coming in v17, modern angular would start looking a lot different from what it is right now. Given the amount the changes angular is bringing in, if we don’t keep ourselves up to date, we won't be able to take advantage of these new features, and our codebase may start looking like a legacy code very soon.