Vì một số lý do, tôi phải chạy ứng dụng của mình ở chế độ sản xuất. Sự khác biệt giữa các chế độ đó là gì?
Vì một số lý do, tôi phải chạy ứng dụng của mình ở chế độ sản xuất. Sự khác biệt giữa các chế độ đó là gì?
Câu trả lời:
Trong chế độ phát triển, phát hiện thay đổi thực hiện lần thứ hai ngay sau lần chạy đầu tiên và tạo ra lỗi nếu bất kỳ giá trị ràng buộc nào đã thay đổi giữa lần chạy thứ nhất và lần thứ hai. Điều này giúp xác định lỗi khi kiểm tra các giá trị có tác dụng phụ hoặc các trường hoặc hàm không trả về cùng một giá trị trong các lần gọi tiếp theo, điều này làm suy yếu khả năng phát hiện thay đổi của Angular.
Trong chế độ phát triển, trong lần chạy phát hiện thay đổi thứ hai, Angular cũng thực hiện một số so sánh đối tượng sâu mà nó sẽ không thực hiện trong quá trình sản xuất để phát hiện những thay đổi mô hình không được phép.
Cập nhật:
Trong chế độ phát triển, một gợi ý cũng được in ra bảng điều khiển khi dịch vụ trình vệ sinh HTML tách các giá trị khỏi các liên kết [innerHTML]="..."
hoặc [ngStyle]="..."
. Xem thêm: Trong RC.1 một số kiểu không thể được thêm bằng cú pháp ràng buộc
Tài liệu cho trạng thái ApplicationRef.tick () :
Trong chế độ phát triển,
tick()
cũng thực hiện chu kỳ phát hiện thay đổi thứ hai (TTL = 2) để đảm bảo rằng không có thay đổi nào được phát hiện. Nếu các thay đổi bổ sung được chọn trong chu kỳ thứ hai này, các ràng buộc trong ứng dụng có tác dụng phụ không thể giải quyết trong một lần phát hiện thay đổi. Trong trường hợp này, Angular đưa ra một lỗi, vì một ứng dụng Angular chỉ có thể có một lần vượt qua phát hiện thay đổi trong đó tất cả phát hiện thay đổi phải hoàn thành.
Lý do mà chúng tôi không thể có các thay đổi bổ sung là vì trong chế độ sản xuất, tính năng phát hiện thay đổi chỉ chạy một lần, có nghĩa là mọi thành phần trong cây thành phần được kiểm tra một lần (TTL = 1) ... từ trên cùng, theo chiều sâu đặt hàng. Vì vậy, nếu thay đổi đối với thuộc tính đầu vào của thành phần con gây ra thay đổi đối với một số thuộc tính khác mà thành phần mẹ đã ràng buộc trong một dạng xem / mẫu, dạng xem của thành phần mẹ sẽ không được cập nhật (vì phát hiện thay đổi sẽ không truy cập lại thành phần cha trong chế độ sản xuất ... vì chuyển tải cây "một lần"). Nó sẽ chỉ được cập nhật vào lần tới khi một số sự kiện xảy ra và tính năng phát hiện thay đổi chạy lại - nhưng đã quá muộn!
Đây là một Plunker vi phạm quy tắc - một thành phần con cóset
phương thức trên một thuộc tính đầu vào để sửa đổi một thuộc tính đầu vào khác. Có, đây là một ví dụ giả, nhưng nó dễ hiểu hơn ví dụ tiếp theo:
Một tình huống khác mà bạn có thể gặp phải sự cố này là với các đường ống trạng thái. Kiểm tra câu trả lời này nếu đó là vấn đề của bạn.
Bạn nên mô tả vấn đề của mình (trong một câu hỏi SO khác). Cần phải có một cách để sửa chữa nó.