Sự khác biệt giữa:
{{::office.name}}
và
{{office.name}}
trong góc cạnhJS?
Câu trả lời:
Biểu thức bắt đầu bằng
::
được coi là biểu thức một lần. Các biểu thức một lần sẽ ngừng tính toán lại khi chúng ổn định, điều này xảy ra sau lần thông báo đầu tiên nếu kết quả biểu thức là một giá trị không xác định (xem thuật toán ổn định giá trị bên dưới).
Trong nhiều trường hợp, các giá trị cần chỉ được hiển thị trong chế độ xem và sẽ không bao giờ cập nhật từ chế độ xem hoặc bộ điều khiển. Tuy nhiên, nếu sử dụng ràng buộc hai chiều, $digest
sẽ kiểm tra bất kỳ thay đổi nào trong biểu thức trong mỗi chu kỳ, điều này là không cần thiết. Trong những trường hợp này, ::
nên được sử dụng trước khi biểu hiện. Như đã nêu trong câu lệnh trên, điều này hiệu quả hơn cú pháp ràng buộc hai chiều cho những trường hợp như vậy.
Blog: Cú pháp ràng buộc một lần AngularJS từ Phương châm @Todd
Trong một nut shell, khi chúng ta khai báo một giá trị chẳng hạn như
{{ ::foo }}
bên trong DOM, khi giá trị này được xác định, Angular sẽ hiển thị nó, hủy liên kết nó khỏi các watchers và do đó giảm khối lượng ràng buộc bên trong$digest
vòng lặp. Đơn giản!