2016-03-24 5 views
1

Ziemlich neu zu Angular und immer noch versucht, meinen Kopf um ein paar Dinge zu wickeln. Ich brauche die Höhe mehrerer Elemente auf einem Dashboard. Ich habe diese Antwort gesehen: Get HTML Element Height without JQuery in AngularJS Allerdings kann ich nicht herausfinden, wie es für mehrere Elemente arbeiten. Sicherlich muss ich keine separate Direktive für jedes Element schreiben. So spielen mit dieser Plunker, änderte ich die HTML nach unten, aber identische Werte für beide Elemente.Holen Sie Höhe für mehrere Elemente ohne JQuery in AngularJS

HMM

script.js:

angular.module('myModule', []) 
    .directive('myDirective', function($timeout) { 
    return { 
     restrict: 'A', 
     link: function(scope, element) { 
      scope.height = element.prop('offsetHeight'); 
      scope.width = element.prop('offsetWidth'); 
     } 
    }; 
    }) 
; 

und die HTML:

<!DOCTYPE html> 
<html> 

    <head> 
    <script data-require="[email protected]*" data-semver="1.2.13" src="http://code.angularjs.org/1.2.13/angular.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <script src="script.js"></script> 
    </head> 

    <body ng-app="myModule"> 

    <h1 my-directive>Hello Plunker! width: {{width}}, height: {{height}} 
    </h1> 
    <h3 my-directive>Smaller Hello Plunker! width: {{width}}, height: {{height}} 
    </h3> 
    </body> 

</html> 
+0

Die Konsole gab mir verschiedene Höhen sein, wenn ich Ihren HTML-Code in die Plunker setzen. (37 & 22) – Adjit

+0

Entschuldigung: mit dem falschen Plünderer verbunden: nur auf den richtigen bearbeitet. Ich versuche herauszufinden, warum die Bindungen identisch sind – Spleenboy

+0

Ahh, ich sehe jetzt. Ja, wenn du die Dev-Tools öffnest, zeigt es die h1 und h3 genauso hoch an, also denke ich, dass der Fehler in deiner Direktiven-Einstellung liegt. Sie sollten diesen Code auch posten. – Adjit

Antwort

0

Die Richtlinien haben keinen Raum, so dass sie die Werte auf $rootScope werden speichern. Die Werte spiegeln die Höhe und Breite der letzten auszuführenden Anweisung wider. Korrigieren Sie Ihre Anweisung, entweder geerbt Geltungsbereich zu verwenden oder isolieren Bereich.

angular.module('myModule', []) 
    .directive('myDirective', function($timeout) { 
    return { 
     restrict: 'A', 
     //set scope to inherited 
     scope: true, 
     //OR use isolate scope 
     //scope: {}, 
     link: function(scope, element) { 
      scope.height = element.prop('offsetHeight'); 
      scope.width = element.prop('offsetWidth'); 
     } 
    }; 
    }) 
; 

Durch die scope-Eigenschaft, die $compile Service einen neuen Bereich erstellen (entweder geerbt oder isolieren) für die Richtlinie Werte speichern einzigartig für die Richtlinie.

Weitere Informationen zu Direktive Scopes finden Sie unter AngularJS Comprehensive Directive API -- scope.

Verwandte Themen