2015-04-08 25 views
7

Geçerli DOM öğesinin kapsamını alması gereken bir yönerge yazıyorum. public public api kullanarak angular.element().scope();Hata ayıklama bilgisi devre dışı bırakıldığında DOM öğesinin kapsamını elde etmenin bir yolu var mı?

Açısal 1.3, temel olarak DOM öğesinde veriyi bağlamaktan kaçınmak için performansı iyileştirmeyi amaçlayan $compileProvider.debugInfoEnabled(false); yeni bir özellik tanıtana kadar iyi çalışır. Ancak debugInfoEnabled() öğesi false olarak ayarlandığında, angular.element().scope(), undefined'u döndürecektir. Bu yüzden, bir DOM öğesinin kapsamını almak için başka bir yol bulmalıyım veya kod mantığımı yeniden tasarlamak zorundayım.

Bunu mümkün kılmanın bir yolu var mı?

cevap

9

Uygulamamızda $compileProvider.debugInfoEnabled(false); ile derledikten sonra benzer bir sorunla karşılaştım. Daha sonra yönergemizin bazı izolatlarına erişmem gerekiyordu, ancak isolateScope() yöntemini kullanamadım. Daha sonra link() içeride bu işlev denir izolatı kapsamını erişebilmesini için gereken tüm direktif iç Sonra

this.setElementIsolateScope = function(element, scope) { 
    element[0].isolateScope = function() { 
     return scope; 
    }; 
}; 

: soruna çözüm olarak, ben şöyle bir Utils hizmetindeki bir yardımcı işlevi yarattı function: element jqLite nesnesi olduğundan, element[0]'da isolateScope() işlevini ayarlamanız gerekir. JqLite sarılmış element ve scope zaten bağlantı işlevinize geçirilmiş, daha sonra sadece hizmet yönteminize geçirmeniz gerekir.

Utils.setElementIsolateScope(element, scope); 

sonra izolatı kapsamı daha sonra erişmek için, o zaman bu (child_element varsayarsak element/yönergesine referanstır) do senin elemanın bir başvuru almak ve olacaktır:

var child_iso_scope = _.isFunction(child_element.isolateScope) && child_element.isolateScope(); 

şekline bağlı olarak Eğer elemana başvurusunu alıyorsanız, böyle bunu bir jqLite sarıcı sarmak gerekebilir: o zaman

child_element = angular.element(child_element); 

Ve sadece izolatı elde etmek yukarıdaki gibi aynı şekilde kullanabilirsiniz kapsamı. Bu yardımcı olur umarım!

İlgili konular