Công bố Angular v22
(blog.angular.dev)- Angular v22 mở rộng luồng AI agent sang các công cụ điều khiển dev server của Angular MCP, Angular Agent Skills, WebMCP thử nghiệm, và quy trình tạo Angular trong Google AI Studio·Gemini Canvas
- Với mục tiêu cải thiện độ ổn định và trải nghiệm phát triển, phiên bản này đưa Signal Forms, Angular Aria,
resource·httpResourcetừ giai đoạn thử nghiệm/preview lên trạng thái sẵn sàng cho production - Signal Forms là API biểu mẫu khai báo kết hợp Reactive Forms, biểu mẫu kiểu mạnh, biểu mẫu dựa trên template, và tính phản ứng của signals; đồng thời đã hoàn tất việc củng cố tài liệu, phản ánh phản hồi cộng đồng, và hỗ trợ Angular Material cùng Angular Aria
- Các cải tiến về API và template bao gồm tích hợp Navigation API cho Router, kiểm soát dọn dẹp tài nguyên route, hỗ trợ
@ServicevàinjectAsync, comment trong phần tử HTML·spread/rest·kiểm tra@switch·hàm mũi tên trong template - Angular v22 củng cố nền tảng tương lai với mặc định OnPush cho ứng dụng mới, đổi tên
ChangeDetectionStrategy.Eager, developer preview của@boundaryvào quý 3/2026, và kế hoạch ngừng hỗ trợ hệ Webpack để tập trung vào TSGo
Các tính năng đã đạt trạng thái sẵn sàng cho production
- Signal Forms là API biểu mẫu phản ứng, có thể kết hợp và mang tính khai báo, kết hợp ưu điểm của Reactive Forms, biểu mẫu kiểu mạnh, các yếu tố được ưa chuộng của biểu mẫu dựa trên template, và tính phản ứng của signals
- Sau khi phát hành v21, nhóm đã cập nhật hướng dẫn forms trên angular.dev, phản ánh phản hồi và issue từ cộng đồng, đồng thời hỗ trợ tích hợp Angular Material và Angular Aria
- Angular Aria là các primitive trợ năng được thiết kế để nhà phát triển tập trung vào style và business logic, còn UI directives và pattern sẽ xử lý phần accessibility; trong v22, nó đã sẵn sàng cho sử dụng production
- 12 UI pattern của Angular Aria bao phủ các mẫu trợ năng phổ biến, có API ổn định, hỗ trợ đầy đủ Signal Forms, và đi kèm test harness
- API phản ứng bất đồng bộ cho phép xử lý tài nguyên bất đồng bộ bằng trải nghiệm sử dụng kiểu signal qua
resource, và xử lý lấy dữ liệu HTTP theo mô hình khai báo hơn quahttpResource resourcevàhttpResourcecó thể dùng trong ứng dụng production từ v22, và cách sử dụng có thể xem trong hướng dẫn chính thức
Phát triển AI và quy trình agent
- Angular v22 mở rộng các luồng dành cho ứng dụng AI-native sang ba mảng: công cụ agent để viết mã, công cụ agent trong trình duyệt, và nền tảng phát triển AI
devserver.wait_for_buildcủa Angular MCP hỗ trợ agent build ứng dụng và xem xét kết quả đầu ra để quyết định bước tiếp theo, đồng thời có thể tạo vòng lặp tự chữa lỗi dựa trên lỗi mã trong log builddevserver.startvàdevserver.stopđảm nhiệm việc khởi động và dừng dev server; các công cụ này cùng với công cụ test và end-to-end đã được nâng lên stable trong v22- Angular MCP đang tiếp tục mở rộng danh sách công cụ hỗ trợ phát triển ứng dụng Angular hiện đại như
ai_tutor,modernize,onpush_zoneless_migration angular-developertrong Angular Agent Skills cung cấp cho mô hình hướng dẫn phát triển Angular hiện đại, bao gồm các tính năng mới như Angular Aria và Signal Forms; tệp này dưới 140 dòng và dùng cách công bố dần để tải code sample cùng file tham chiếu khi cầnangular-new-apphướng dẫn người dùng lần đầu khám phá Angular trong môi trường agent thiết lập môi trường lập trình Angular cục bộ; các skills này có thể dùng trong công cụ phát triển AI như Antigravity hoặc môi trường quy trình agent- Contributor Skills giúp hiểu mental model cần thiết để phát triển tính năng bên trong codebase Angular, có giá trị cho cả người chuẩn bị pull request đầu tiên lẫn thành viên giàu kinh nghiệm
- WebMCP thử nghiệm cho phép tạo và công bố các công cụ có cấu trúc để agent dùng ngay trong trình duyệt, giảm nhu cầu tương tác với DOM, đồng thời hỗ trợ định nghĩa công cụ cho toàn bộ ứng dụng·routes·services và tự động tạo công cụ động dựa trên Signal Forms
- Tài liệu tích hợp WebMCP có tại angular.dev/ai/webmcp
- Google AI Studio và Gemini Canvas hỗ trợ các builder không có nền tảng lập trình truyền thống bắt đầu dự án dựa trên Angular; trong sandbox lập trình tích hợp của ứng dụng web Gemini, có thể tạo toàn bộ ứng dụng ngay trong trình duyệt
- Trong quy trình Gemini, chỉ cần chỉ định “Angular” trong prompt là ứng dụng Angular sẽ được tạo; sau đó có thể chỉnh sửa thủ công trong trình duyệt, tiếp tục trao đổi với AI để tinh chỉnh, hoặc yêu cầu tích hợp Firebase
- Trong Google AI Studio, có thể dùng quy trình tương tự bằng cách chọn Angular trong configuration panel rồi bắt đầu prompt; sau khi tạo xong, có thể thêm tính năng qua chat và tiếp tục đến bước triển khai
Router và API tiêm phụ thuộc
- Tích hợp Navigation API giúp Router đồng bộ với Navigation API gốc của trình duyệt, cho phép kiểm soát việc di chuyển trong ứng dụng với ít boilerplate hơn
- Router có thể tự động chặn mọi navigation request, bao gồm
RouterLinkvà các thẻ anchor chuẩn - Nó tận dụng native scroll behavior để người dùng quay lại đúng vị trí mong đợi khi back/forward, không cần custom scroll-management logic và cũng không ảnh hưởng đến bundle size
- Việc kết nối trực tiếp với navigation lifecycle gốc của trình duyệt cũng giúp xử lý global loading indicator và accessibility announcement chính xác hơn trong quá trình chuyển trang
- Kiểm soát dọn dẹp route xử lý quản lý bộ nhớ theo cách tường minh hơn với hai tính năng
withExperimentalAutoCleanupInjectorsvàdestroyDetachedRouteHandle withExperimentalAutoCleanupInjectorstự động destroy dependency injector gắn với route không còn active, dọn dẹp các provider và resource ở cấp route đang idledestroyDetachedRouteHandlelà public API chính thức để destroy gọn gàng component trong detached route handle khi dùngRouteReuseStrategytùy chỉnh- Decorator
@Servicethay thế mẫu@Injectable({ providedIn: 'root' })trong hầu hết trường hợp sử dụng; nếu cần cấu hình sâu hơn hoặc constructor injection thì vẫn có thể tiếp tục dùng@Injectable injectAsynchỗ trợ tiêm phụ thuộc bất đồng bộ cho service, cho phép code splitting và tải theo nhu cầu; service phải ở trạng thái auto-provided và@Servicexử lý điều đó- Trong ví dụ
injectAsync, serviceReportExportersẽ không được tải cho đến lần đầu được dùng, và cũng có thể cấu hình prefetch nhưprefetch: onIdle - Cách sử dụng có thể xem trong tài liệu chính thức về injectAsync
- Các cải tiến khác bao gồm tương thích đầy đủ với TypeScript 6 và cải thiện hiệu năng ở template pipeline cùng runtime efficiency
Trải nghiệm viết template và change detection
- Có thể dùng comment ở mức property và binding trong phần tử HTML, giúp tăng tính dễ đọc và rõ ràng cho template, đồng thời hỗ trợ cả tính năng comment toggling trong VS Code
- Angular tự động loại bỏ trùng lặp các host directive khớp nhiều lần trên cùng một phần tử
- Nếu một directive khớp ở cả template và host directive thì phần khớp từ template được ưu tiên, còn input/output map của host directive sẽ được gộp lại
- Nếu một input hoặc output được expose dưới nhiều tên, Angular sẽ phát sinh lỗi để ngăn xung đột đặt tên
- Có thể dùng cú pháp spread/rest trong template, áp dụng cho object literal, array literal và function call
@switchcho phép nhiều@casechia sẻ cùng một output để giảm trùng lặp mã- Trong block
@switchdùng union type, nếu dùng@default never;thì sẽ nhận được compile-time error khi còn giá trị chưa được xử lý - Hàm inline trong template có thể dùng dưới dạng arrow function; phù hợp với các hàm ngắn và đơn giản, còn hàm phức tạp hoặc chạy lâu thì không nên đặt trong template
- Trong ứng dụng mới,
OnPushlà chiến lược change detection mặc định, phù hợp với mục tiêu zoneless by default và performance by default - Mặc định cũ
ChangeDetectionStrategy.Defaultđược đổi tên thànhChangeDetectionStrategy.Eagerđể thể hiện rõ hơn hành vi trong chu kỳ change detection
Error boundary, nội dung sắp bị loại bỏ và định hướng tiếp theo
@boundarylà API mới để triển khai error boundary trong template Angular, có thể bắt lỗi phát sinh từ code block được bao quanh và chỉ định nội dung fallback- Mục tiêu là giảm tình trạng một component lỗi làm sập toàn bộ trang trong các luồng quan trọng như thanh toán thương mại điện tử
@boundarydự kiến được cung cấp dưới dạng developer preview vào quý 3 năm 2026- Webpack support, các builder của
@angular-devkit/build-angular,@ngtools/webpackvà các thành phần liên quan đều chuyển sang trạng thái deprecated trong v22 - Angular sẽ tập trung vào hỗ trợ TSGo cho application builder; thông tin deprecation chi tiết hơn có trong Angular CHANGELOG
1 bình luận
Ý kiến trên Hacker News
Tôi đang xây một ứng dụng khá phức tạp bằng Angular v21, và trải nghiệm rất tốt vì gánh nặng nhận thức khi tạo và xử lý component, state và luồng dữ liệu khá thấp
Nhờ signals và signal store mà mọi thứ trở nên rất dễ, và tôi viết tay toàn bộ mà không dùng công cụ AI hỗ trợ lập trình
Dạo này phải công nhận Angular đã đạt đến mức dùng rất thích
Hệ sinh thái hơi thô ráp một chút thì đáng tiếc, nhưng bù lại may là tính năng tích hợp sẵn cực kỳ nhiều
Tôi chỉ mong Angular bỏ trình biên dịch khá lạ vốn gắn chặt với
tsc, và chuyển sang cách tiếp cận mang tính plug-in hơn, có thể dùng với bất kỳ trình biên dịch TypeScript nàoThời gian cold build cho ứng dụng và unit test vẫn chưa tốt lắm, nhưng nếu dùng coding agent thì gánh nặng đó cũng bớt đáng bận tâm hơn
Tôi chưa từng gặp vấn đề khi tìm package, và đa số package cũng đang bám khá tốt theo luồng signal
Hay là giờ hệ sinh thái Angular cũng đã tỉnh táo trở lại rồi
Gần đây tôi đã nâng một dự án Angular khá phức tạp từ v14 lên v21
Có cảm giác vài năm qua tốc độ phát triển của Angular đã chậm lại, nhưng khi nhìn toàn bộ thay đổi giữa các phiên bản đó cùng một lúc thì nó gần như giống một framework hoàn toàn mới
Angular Aria trông thực sự rất tuyệt
Tài liệu được viết rất tốt, kể cả cho các kịch bản phức tạp như autocomplete, nên tôi rất muốn sớm thử xem nó có thể thay thế phần autocomplete dành cho screen reader mà trước đây tôi phải tự làm hay không
tab/shift+tabvốn phổ biến hơn nhiềuThậm chí ngay phía trên ví dụ đó, các tab trong chính tài liệu của họ lại dùng
tab/shift+tabđể chuyển focusTôi thực sự rất mong chờ tính năng này
Từ khi còn là tính năng thử nghiệm tôi đã muốn dùng signal-forms và resources, và một khi đã chuyển sang signal thì không thể quay lại được nữa
Việc phải dùng RxJS chỉ vì forms là một nỗi đau lớn
Không biết nó có giống mô hình signal trong các game engine như Godot, nơi component phát signal và các component khác đăng ký nhận bất kể độ sâu, hay là một thứ hoàn toàn khác
Trước thời React tôi từng dùng Angular rất thích và đó là một giai đoạn khá ổn, nhưng thành thật mà nói thì giờ tôi gần như quên mất Angular vẫn còn tồn tại
Cũng không phải để khen React, vì dạo này tôi lại thích cách làm của htmx hơn
Chỉ là giờ có cảm giác cạnh tranh đã chuyển sang chuyện agent xử lý framework hay ngôn ngữ nào tốt hơn, và các công cụ phân tích tĩnh hoặc ở mức compiler có thể bắt lỗi giúp được bao nhiêu
Tôi thích Angular vì nó hơi giống Django
Mọi thứ cần thiết đều có sẵn nên dùng rất dễ
Hoặc dùng một backend nhanh hơn có template và server-side rendering, rồi gắn thêm htmx vào để có trải nghiệm gần như ứng dụng một trang mà không cần chịu cơn điên của hệ sinh thái JS vốn đã hỏng thực sự
Nhờ Angular mà sự nghiệp lập trình của tôi trở nên vui vẻ, và hoàn toàn không có cảm giác như đang đi làm
Không có gì tuyệt hơn việc được làm bằng ngôn ngữ mình thích, học thêm được nhiều thứ, lại còn được trả tiền
Tôi đã không dùng Angular một thời gian rồi
Với tư cách là người dùng các framework JavaScript khác như Vue, React, Svelte, tôi tò mò không biết mình đang bỏ lỡ điều gì
Tôi muốn biết lý do vì sao mọi người chọn Angular thay vì các framework lớn khác
Đặc biệt phù hợp nếu bạn không quá thích JavaScript và phát triển web, và xem backend mới là phần chính
Kiểu như
import {signal} from "@angular/core"vàimport {form} from "@angular/forms/signals", tức làsignalthì đến từ core cònformthì đến từ forms/signalsCó vẻ như có một lý do về mặt thuật ngữ nào đó mà tôi chưa hiểu
Ngoài chuyện đó ra thì tôi khá háo hức được dùng lại Angular sau 10 năm, và nó trông khá ổn
Form dựa trên signal là một phần của module Forms, nên nếu không dùng form thì bạn cũng không phải mang theo phần overhead đó
Có lẽ đây là import để lấy form dựa trên signal mới ra mắt