Angular Ivy đặc biệt cho phép chúng ta làm gì liên quan đến phát hiện thay đổi thủ công?


8

Bài viết này đề cập rằng

Ivy mở ra một vài khả năng cho tương lai. Bây giờ có thể chạy một ứng dụng mà không có area.js và xử lý phát hiện thay đổi bán thủ công (một chút giống như bạn làm với React). Các API này đã tồn tại nhưng là thử nghiệm, chưa được ghi lại và có thể sẽ thay đổi trong tương lai gần.

Tôi nghĩ rằng đã có thể chạy một ứng dụng mà không có area.js trước Ivy. Ivy có cho phép xử lý phát hiện thay đổi bán thủ công không? Những API thử nghiệm đó ở đâu? Bất kỳ tài liệu? Ivy vẫn sử dụng zone.js chứ?

Mục tiêu của tôi là hạn chế phát hiện thay đổi đến mức tối thiểu bằng cách kích hoạt chúng theo cách thủ công. Lựa chọn tốt nhất để làm điều đó là gì Cụ thể đâu là lựa chọn tốt nhất khi sử dụng Ivy.

Câu trả lời:


10

Đó là một chủ đề lớn để đề cập ở đây, nhưng tôi sẽ cố gắng trả lời.

Ý tưởng thực sự là kết xuất các thành phần mà không khai báo chúng bên trong bất kỳ mô-đun nào.

Tại sao chúng ta muốn làm một cái gì đó như thế? Nó đơn giản - Các mô-đun không chỉ là các thành phần. Các mô-đun có khu vực, nhà cung cấp, kim phun, DI, và nhiều hơn nữa. Các mô-đun cho rất nhiều người trong chúng ta đại diện cho các ứng dụng. Và đôi khi chúng ta chỉ muốn tạo ra một thành phần đơn giản và kết xuất nó trong một thành phần khác.

Vấn đề nó sẽ gây ra là gì? Các mô-đun là người thiết lập các khu vực cho chúng tôi. Các khu là những người kích hoạt phát hiện thay đổi tự động. Nếu chúng tôi sẽ kết xuất một thành phần bên ngoài mô-đun, chúng tôi sẽ không phát hiện thay đổi tự động.

Vì vậy, với Ivy, chúng tôi có một vài APIS mới có thể giúp chúng tôi:

ɵrenderComponent() - Điều đó có thể kết xuất một thành phần mà không cần khai báo nó trong một mô-đun.

ɵdetectChanges();- Để kích hoạt phát hiện thay đổi theo cách thủ công, nhưng, đó chỉ là một chức năng từ @angular/corevà bạn không cần DI nữa để tiêmChangeDetectorRef

ɵmarkDirty() - Để đánh dấu thành phần cần kiểm tra trong chu kỳ phát hiện thay đổi tiếp theo.

ɵɵdirectiveInject() - Tiêm một mũi tiêm trong một vấn đề về chức năng, mà không sử dụng hàm tạo.

Nếu bạn hỏi ɵdấu hiệu này là tiền tố của tất cả các API mới đó, điều đó có nghĩa là các chức năng đó vẫn đang thử nghiệm và bạn không nên sử dụng chúng để sản xuất. Và đó cũng là lý do tại sao chúng không được ghi nhận.

Đối với câu hỏi của bạn - nếu bạn muốn giảm thiểu việc sử dụng CD trong các thành phần của mình, chỉ cần kết xuất chúng với renderComponentchức năng và tự xử lý CD.

Nếu bạn muốn đọc thêm, tôi đã viết một bài đăng blog hoàn chỉnh chính xác về chủ đề này, bao gồm rất nhiều ví dụ về mã. Bạn có thể tìm thấy nó ở đây - " Tương lai của các thành phần độc lập trong những ngày phát hành Ivy "

Tôi cũng đã nói về nó trong NG-DE 2019 - " Bye Bye NgModules "

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.