2013-05-23 18 views
16

Jak uzyskać element body w dyrektywie kątowej? moim celem jest zrobienie tego, co robię z jquery $('body').innerWidth(); wewnątrz dyrektywy. Nie chcę używać jquery, ale kątowej wbudowanej implementacji jqlite.Angularjs - pobierz element wewnątrz dyrektywy

+0

Chciałem, aby uzyskać dostęp do znacznika body zmienić klasę - ale kątowa ma powiązania, które powinny być używane - jej tylko, że dla mnie nie ma zasięgu z mojej zakopanej dyrektywy (modal box), ten modal ma klasę do wstawienia w tagu body, który możesz zrozumieć, jak to pomaga. Wolę używać powiązania z logiką w mojej dyrektywie .. ale od dyrektywy, w jaki sposób mogę uzyskać dostęp do odpowiedniego zakresu? To, że tutaj komentuję, nie jest odpowiedzią, ale niektórymi pomysłami dotyczącymi tego problemu. – landed

Odpowiedz

30

Jeśli chcesz uzyskać dostęp do elementu ciała od wewnątrz dyrektywy, która nakłada się na inny element, można skorzystać z usługi $document jak tak ..

app.directive("myDirective", function($document) { 
    return function(scope, element, attr) { 
    var bodyWidth = $document[0].body.clientWidth; 
    console.log("width of body is "+ bodyWidth); 
    }; 
}); 

<button my-directive>Sample Button</button> 

Można też użyć metod DOM przemierzania dostarczane w jqLite (choć są one znacznie mniej wydajne niż oferowane przez jQuery). Na przykład można wykonać rekursywne wyszukiwanie przy użyciu metody angular.element.parent(), aby znaleźć znacznik body.

+0

Przepraszam, powinienem był wspomnieć. Moja dyrektywa znajduje się głęboko w etykiecie ciała. Czy jest możliwy dostęp do ciała, które może znajdować się nad drzewem (a nie dziecko elementu)? – bsr

+0

tak, w twoim przykładzie, czy możliwe jest uzyskanie szerokości ciała wewnątrz miejsca, w którym zastosowałeś katalog na TABELI – bsr

+0

Zaktualizowałem moją odpowiedź. – jessegavin

9

Jeszcze jeden wariant z użyciem realizację find() który znajduje się w kątowym za jQLite:

app.directive("myDirective", function() { 
    return function(scope, element, attr) { 

    var body = angular.element(document).find('body'); 
    console.log(body[0].offsetWidth); 

    }; 
}); 
+1

Jeśli spojrzysz na kod kątowy pod '$ SnifferProvider' zobaczysz odniesienie do' document.body', gdzie 'dokument' po prostu jest' document = $ document [0] || {} ' – Izhaki

Powiązane problemy