2016-03-25 7 views
1

Wie kann ich eine ng-Klasse (innerhalb ng-repeat) abhängig vom Bildseitenverhältnis einstellen?Angular ng-Klasse abhängig vom Bildformat

so etwas wie ...

<div ng-repeat="img in images" style="width: 100px; height: 100px;"> 
    <img ng-src="{{img}}" ng-class="{'wide': img.width/img.height > 1, 'tall': img.width/img.height <= 1}" /> 
</div> 

EDIT: CSS-Objekt-fit für mich nicht, weil der IE arbeiten ... :(

+0

, das wie es aussieht, sollte funktionieren. Funktioniert es nicht für dich? – Lex

+0

Nop ... "img.width" ist keine Eigenschaft von img array .... Ich möchte die Bildbreite und -höhe bekommen, aber ich weiß nicht, wie –

+0

Oh, ha ... Gotcha. Hilft [diese Antwort] (http://stackoverflow.com/a/14508318/548997)? Klingt so, als müssten Sie eine Direktive schreiben (was ziemlich normal ist, wann immer Sie anfangen wollen, sich mit dem DOM herumzuschlagen). – Lex

Antwort

1

Das Hauptproblem hier ist für das Bild zu warten lade vor dem Einstellen der width/height Eigenschaften auf dem Objekt img json So funktioniert so etwas

Wichtig: Scope.apply - Weil Sie den Bereich in einem nicht-eckigen Kontext ändern, dh in jQuery müssen Sie Rufen Sie scope.apply auf, damit der Digest-Watch-Zyklus und der Variabl Es wird richtig eingerichtet.

Plunker

HTML:

<img ng-src="{{img}}" image-set-aspect ng-class="{'wide': img.width/img.height > 1, 'tall': img.width/img.height <= 1}" /> 

Richtlinie:

app.directive('imageSetAspect', function() { 
    return { 
     scope: false, 
     restrict: 'A', 
     link: function(scope, element, attrs) { 
     element.bind('load', function() { 
      // Use jquery on 'element' to grab image and get dimensions. 
      scope.$apply(function() { 
       scope.imageMeta.width = $(element).width(); 
       scope.imageMeta.height = $(element).height(); 
       console.log(scope.$parent.imageMeta); 
      }); 
     }); 
     } 
    }; 
}); 
+0

DANKE Dr. Jones. Wirklich brauche ich die Eigenschaften nicht, es war nur eine "Skizze". Wichtig ist, dass Sie die Klassen 'breit' oder 'groß' richtig anwenden. [Dies] (https://plnrkr.co/edit/nXzDbM5GldH8jezLXZA5?p=preview) ist der Plünderer. Sie sehen ein Beispiel für das erwartete Ergebnis. Nochmals vielen Dank für Ihre Hilfe und Ihre Zeit! –

+0

Aktualisierte obige Lösung. –

+0

Dr Jones, danke, der Plünderer ist schon! Aber in meiner Anwendung funktioniert nicht ... etwas falsch mit diesen beiden Zeilen 'scope. $ Parent.imagen.width = $ (Element) .width();' und 'scope. $ Parent.imagen.height = $ (Element) .height(); ' Im Debug-Modus sehe ich nicht die Werte' $ (element) .width(); 'nach' scope. $ parent.imageMeta.width' ... nach dieser Zeile, 'scope. $ parent.imageMeta.width' ist undefiniert. –