Đó 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/core
và 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 renderComponent
chứ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 "