2013-06-06 41 views
7

Tôi có một số $scope.$watch được khai báo trong bộ điều khiển của chỉ thị. Khi tôi thay đổi trang và chỉ thị bị xóa thì tôi có phải phá hủy theo cách thủ công không? Nếu vậy làm thế nào để tôi phát hiện khi chỉ thị đã được gỡ bỏ?Chỉ thị Angularjs loại bỏ đồng hồ?

+0

Góc nên quan tâm đến điều đó cho bạn –

Trả lời

20

Tùy thuộc vào phạm vi, không chỉ thị. Nếu phạm vi bị phá hủy, thì tất cả các $ watchers của nó sẽ chết với nó. Trên trang thay đổi phạm vi của bạn sẽ bị phá hủy bởi góc cạnh, vì vậy bạn nên an toàn.

Khi phạm vi chết, nó mang lại sự kiện hủy $. Bạn có thể xem nó:

$scope.$on('$destroy', callback); 

và bạn có thể tự tách $ sát từ phạm vi, bằng cách gọi hàm nó sẽ trả về:

var sentinel = $scope.$watch('expression', callback); 
sentinel(); // kill sentinel 

Bạn có thể làm điều này với $ trên quá.

+0

Thứ nhất, bạn đã nói khi phạm vi bị hủy, tất cả người xem đều chết với nó. Sau đó, bạn đề nghị tự loại bỏ người theo dõi trên phạm vi $ phá hủy sự kiện (tại sao? Họ có nghĩa vụ phải tự động chết với phạm vi). Điều đó không có ý nghĩa với tôi. Bạn có thể xây dựng được không? – hendrix

+1

Khi trang được thay đổi với góc ngView sẽ dọn sạch phạm vi cuối cùng cho bạn với người theo dõi. (proof => http://goo.gl/GD0pM9) Ngoài ra góc cung cấp cho bạn một chức năng hủy watcher để bạn có thể tự xóa biểu thức nếu bạn không cần nó nữa trên phạm vi hiện tại. – Oliver

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