Tại sao entryComponents không cần thiết nữa trong trình biên dịch Angular 9 / ivy?


17

Bất cứ ai cũng có thể đưa ra một lời giải thích rõ ràng về lý do tại sao trong trình biên dịch IVY, API thành phần nhập không còn cần thiết nữa không?. Nói cách khác, những gì đã thay đổi bên trong để Angular đột nhiên không cần một cái đầu mà bạn sẽ tạo ra thành phần một cách linh hoạt

Câu trả lời:


37

XemEngine

Trước Ivy, trình biên dịch ViewEngine đã thực hiện phân tích toàn bộ chương trình dựa trên cấu hình NgModule và mẫu html và sau đó sản xuất các nhà máy mô-đun và thành phần dựa trên thông tin bắc cầu toàn cầu này.

Điều này có nghĩa là nếu bạn có một thành phần mà bạn không tham chiếu trong mẫu và bạn chưa thêm nó vào entryComponentsmảng NgModule thì thành phần này sẽ không được biên dịch và bạn không thể kết xuất nó một cách linh hoạt vì Angular không biết nơi để có được nhà máy cho thành phần này.

Khi bạn đã thêm nó, trình biên dịch sẽ tạo ra nhà máy chuyên dụng và cũng thêm nhà máy này vào HashMap nội bộ để có thể giải quyết thông qua ComponentFactoryResolver.

Ivy

Ivy giới thiệu một trình biên dịch ngtsc hoàn toàn mới mà mô hình tinh thần là trình trang trí là trình biên dịch .

Nói cách khác, kiến ​​trúc tổng thể của ngtsc nó là một tập hợp các biến áp TypeScript : cho thành phần, ống dẫn, ngModule, v.v.

Những máy biến áp này phát ra các chức năng tĩnh như AppComponent.ɵfac , AppComponent.ɵcmptại chỗ có nghĩa là mã được mã hóa nằm trong cùng một tệp nơi đặt thành phần ban đầu / pipe / ngModule. Vì vậy, chúng tôi có các nhà máy (tất cả các mã cần thiết để khởi tạo các thành phần / ống / mô-đun góc) ở cùng một nơi và chúng có thể dễ dàng được truy cập bởi các thuộc tính tĩnh đó.

Nói một cách đơn giản, nếu có một tệp có trong trình biên dịch TypeScript có lớp với một @Component trình biên dịch TypeScript trang trí thì trình biên dịch ngtsc sẽ phát ra nhà máy cho lớp này trong cùng một tệp.

Như bạn có thể đoán nếu bạn nhập thành phần đó trong bất kỳ tệp nào và Angular có thể dễ dàng khám phá nhà máy của nó thông qua thuộc tính tĩnh.

Xem thêm:


1
Những gì về các thành phần web / các yếu tố góc? Tôi có giữ nó nếu tôi muốn xuất các thành phần của mình dưới dạng các thành phần tùy chỉnh không? Các tài liệu vẫn nói để thêm chúng trong các thành phần mục nhập
user2010955

@ user2010955 Không. Tôi nghĩ rằng bạn không cần phải đăng ký các yếu tố với entryComponents trong NgModules.
yurzui
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.