2012-12-12 31 views
14

AngularJS'de bağlamaların bağlantısını kesmenin doğru yolu nedir?AngularJS - bellek sızıntılarını önlemek için bağlamaları kaldırın

Veri bağlayıcı yapmak için angularjs kullanan bir bileşeni yükleyen hiçbiri açısal olmayan bir uygulamam var. Bir noktada bileşeni yok etmek istiyorum ve bellek sızıntısı olmadığından emin olmak istiyorum. DOM'ın tüm bölümlerindeki tüm etkinlik dinleyicilerini kaldırmak için açısal olarak nasıl söylerim?

$(node).remove() Bu hile yapar mı, yoksa açılışı temizlenmesi gereken bellekte başka şeyler yapar mı? Anı kaçaklarının açısal olarak önlenmesi ile ilgili diğer ipuçları takdir edilecektir.

cevap

10

Yalnızca bir Kapsamı olan bir DOM öğesinin remove() gibi bir şeyle kaldırılması, Kapsamdaki Bellek'ten kurtulmayacaktır. Bir öğeyi kaldırarak ve Batarang numaralı telefonu arayarak veya ana kapsamı alıp çocuklarını inceleyerek onaylayabilirsiniz. Kapsamın hala orada olduğunu göreceksiniz .... Dolayısıyla, Scope'un kendisinde de $destroy()'u aramak isteyeceksiniz.

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

DÜZENLEME: Emin olmadığım bir şey, kapsamı tamamen silmesi, ya da yalnızca bağlantıyı kesmesi ve JavaScript GC'nin diğerlerinin ilgilenmesine izin vermesidir.

+0

Hızlı yanıt için teşekkürler! –

+0

, dokümanlar, kapsamı ve DOM öğesini açacak bir jQuery olayı olduğunu ancak örnek bir kullanım durumu sunmadığını söylüyor. Elemanların kapsamını bulmak, yok etme yöntemini çağırmak ve sonra jquery remove() kullanmak mı? Bu işlevsellik açısal içinde tam bir işlev olarak mevcut değil garip görünüyor! – sidonaldson

+0

window.leak için bir kapsam atarsanız ve sonra bir konsolu günlüğe kaydeder. $ On ('destroy', ...) imhası görürsünüz, ancak hala sızıntı kapsamına erişebilirsiniz. –

İlgili konular