Lên đời con hàng Angular 11 🚀

I am a developer from Vietnam.
Bài viết tham khảo tại trang chủ của Angular: https://angular.io/guide/updating-to-version-11.
Như thông tin từ Angular 🚀 thì phiên bản 11.0.0 đã được vào ngày Big Sale vừa rồi - 11/11. 😄
Version ^10.0.0 sẽ không còn được update các tính năng mới kể từ Giáng sinh năm nay 24/12/2020.
Vậy nên đây là thời gian tốt để tìm hiểu những thay đổi lớn khi lên đời con hàng Angular ^11.0.0 từ phiên bản ^10.0.0.
Những API sẽ bị loại bỏ
Xem thêm tại đây hoặc cụ thể hơn tại đây danh sách API sẽ bị loại bỏ.
Về chính sách loại bỏ thì:
Khi 1 API hay 1 tính năng bị thông báo loại bỏ ở 1 version bất kỳ thì nó vẫn sẽ được giữ lại cho tới 2 bản release lớn sau này. Ví dụ như API bị thông báo loại bỏ ở
Angular 7.xxthì vẫn được giữ lại ởAngular 8.xxvàAngular 9.xx, thực sự không thể dùng ởAngular 10.0.Cho tới khi nó bị loại bỏ thực sự thì nó chỉ được sửa các lỗi về bảo mật thôi.
npm dependencieschỉ phải update nếuAngularđược update lên đời -major version(ví dụ từ 10.xx lên 11.xx).
Những thay đổi lớn
IE 9, 10 và IE mobile sẽ không còn được support. Tuy nhiên các bạn đừng lo, vẫn còn IE 11 cơ mà 😄.
Phải update lên ít nhất là
TypeScript 4.0.@angular/routerloại bỏpreserveQueryParams, thay vào đó sử dụngqueryParamsHandling = "preserve". Những thay đổi tương tự như thế này rất nhiều nên mình xin phép không liệt kê ở đây nữa.Config cho
router module, trongforRoot()thì thuộc tínhrelativeLinkResolutionsẽ được chuyển default làcorrectedthay vìlegacy.
RouterModule.forRoot(routes, { relativeLinkResolution: 'corrected' })
Nó enable a bug fix (bug cụ thể tại đây).
Nó làm cho 1 components với 1 path là rỗng:
const routes = [
{
path: '',
component: ContainerComponent,
children: [
{ path: 'a', component: AComponent },
{ path: 'b', component: BComponent },
]
}
];
Trong ContainerComponent thì đoạn sau sẽ không hoạt động:
<a [routerLink]="['./a']">Link to A</a>
Thay vào đó là:
<a [routerLink]="['../a']">Link to A</a>
Tóm lại là dùng ../ thay vì ./.
Xóa bỏ
@angular/platform-webworker.Một số type được sửa trong API.
InitialNavigation bỏ option
enable, thay vào đó thì dùng'disabled' | 'enabledBlocking' | 'enabledNonBlocking'.DatePipekhông làm tròn phần chữ số thập phân thứ 3 (milliseconds) nữa.Mảng dữ liệu ngôn ngữ chuyển sang chế độ
read-only.Gọi
overrideProvidertrước khởi tạoTestBedsẽ có lỗi.async functiontrong@angular/core/testingđược đổi tên thànhwaitForAsyncđể tránh nhầm lẫn với cú phápJavaScriptasync.
Ngoài ra còn những bug fix và việc cảu thiện hiệu năng khác.
Từ giờ có thể sử dụng
webpack 5bằng việc sử dụngyarnvà thêm"resolutions": {"webpack": "^5.0.0"}vàopackage.json. Việc này hứa hẹn bundle size sẽ giảm xuống chăng?Angular Formsvớiasync validatorsđược định nghĩa tại thời điểm khởi tạo trongclass instancescủaFormControl,FormGrouphoặcFormArray, khi async validator completed thì event màstatus changekhông được gửi đi (emitted). Giờ thìstatus eventgửi tớistatusChangesobservable(formControlInstance.statusChanges.subscribe()).
Sau khi upgrade thành công
Gõ ng lint thì ra dòng cảnh báo:
TSLint's support is discontinued and we're deprecating its support in Angular CLI.
To opt-in using the community driven ESLint builder, see: https://github.com/angular-eslint/angular-eslint#migrating-from-codelyzer-and-tslint.
Tới tận phiên bản 11, Angular mới có hướng dẫn 1 cách chính thống về việc chuyển tslint sang @typescript-eslint.
Sau khi xem qua các thay đổi chính thì tôi có thể yên tâm upgrade to Angular 11 rồi. Ngoài ra bạn có thể xem chi tiết hơn nữa qua CHANGELOG ở github tại đây nhé.
Icon source lấy ở đây.



