2013-05-23 13 views
16

Wie erhalten Sie body Element in Winkelanweisung? Mein Ziel ist es, zu tun, was man mit jquery $('body').innerWidth(); innerhalb der Direktive tun. Ich möchte nicht jQuery, sondern eckige integrierte jqlite-Implementierung verwenden.Angularjs - get Körperelement innerhalb der Direktive

+0

ich Zugriff auf den Body-Tag bekommen wollte die Klasse zu ändern - aber Angular hat Bindungen, die verwendet werden sollten - es ist nur, dass für mich ist der Umfang nicht von meiner vergrabenen Direktive (eine Modal-Box) dieses Modal hat eine Klasse in den Body-Tag einfügen, die Sie verstehen können, wie das hilft. Ich bevorzuge eine Bindung aus der Logik in meiner Direktive..aber von der Direktive wie kann ich auf den richtigen Bereich zugreifen? Dass ich hier Stellung nehme, ist keine Antwort, sondern einige Ideen zu diesem Problem. – landed

Antwort

30

Wenn Sie das Körperelement zugreifen müssen innerhalb einer Richtlinie, die auf einem anderen Element angelegt wird, können Sie die Verwendung des $document Dienst wie so ..

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> 

Sie können auch verwenden, um die Methoden DOM Traversal machen können in jqLite bereitgestellt (obwohl sie viel weniger mächtig sind als das, was jQuery anbietet). Sie können beispielsweise eine rekursive Suche mit der Methode angular.element.parent() durchführen, um das body-Tag zu suchen.

+0

Entschuldigung, hätte ich erwähnen sollen. Meine Anweisung ist tief in Body-Tags. Ist es möglich, auf den Körper zuzugreifen, der weit über dem Baum liegt (kein Kind des Elements) – bsr

+0

Also, in Ihrem Beispiel, ist es möglich, die Breite des Körpers innerhalb wo Sie das Verzeichnis auf TABELLE – bsr

+0

Ich aktualisierte meine Antwort. – jessegavin

9

Eine weitere Variation mit der find() Implementierung, die in Winkeln des jQLite enthalten ist:

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

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

    }; 
}); 
+1

Wenn Sie sich den Winkelcode unter '$ SnifferProvider' ansehen, sehen Sie einen Verweis auf' document.body', wobei 'document' einfach' document = $ document [0] || ist {} ' – Izhaki

Verwandte Themen