2012-12-12 26 views
14

Cách thích hợp trong AngularJS để ngắt kết nối là gì?AngularJS - loại bỏ các ràng buộc để tránh rò rỉ bộ nhớ

Tôi có ứng dụng không có góc đang tải thành phần sử dụng angularj để thực hiện ràng buộc dữ liệu. Tại một số điểm tôi muốn phá hủy các thành phần và muốn chắc chắn rằng không có rò rỉ bộ nhớ. Làm thế nào để tôi nói góc cạnh để xóa tất cả người nghe sự kiện khỏi phần đó của DOM?

$(node).remove() sẽ thực hiện thủ thuật, hay không làm những việc khác trong bộ nhớ cần được dọn dẹp ...? Bất kỳ lời khuyên nào khác về việc tránh rò rỉ mem trong góc sẽ được đánh giá cao.

Trả lời

10

Chỉ cần xóa phần tử DOM có Phạm vi có nội dung như remove() sẽ không loại bỏ Phạm vi trong bộ nhớ. Bạn có thể xác nhận điều này bằng cách xóa một phần tử và tìm kiếm trong Batarang hoặc bằng cách nhận phạm vi cấp độ gốc và kiểm tra con của nó. Bạn sẽ thấy phạm vi vẫn còn đó .... Vì vậy, bạn cũng sẽ muốn gọi $destroy() trên Phạm vi.

More information about $destroy() can be found here.

EDIT: Một điều tôi không chắc chắn, là nếu nó xóa hoàn toàn phạm vi, hoặc chỉ ngắt kết nối phạm vi và cho phép JavaScript GC quản lý phần còn lại.

+0

Cảm ơn bạn đã phản hồi nhanh! –

+0

các tài liệu nói rằng cũng có một sự kiện jQuery để hủy liên kết phạm vi và phần tử DOM nhưng không đưa ra một trường hợp sử dụng ví dụ. Nó chỉ là một trường hợp tìm kiếm phạm vi phần tử, gọi phương thức hủy và sau đó sử dụng jquery remove()? Có vẻ như chức năng này lạ không tồn tại như một chức năng hoàn chỉnh bên trong góc! – sidonaldson

+0

nếu bạn gán một phạm vi cho window.leak và sau đó thiết lập một bảng điều khiển đăng nhập trên phạm vi. $ On ('destroy', ...), bạn sẽ thấy phá hủy được gọi nhưng bạn vẫn có thể truy cập phạm vi từ rò rỉ. –

Các vấn đề liên quan