2014-04-25 4 views
5

Ich hoffe, ich vermisse hier nicht etwas Offensichtliches, aber ich versuche Angular zu lernen, und ich habe ein Problem beim Versuch, eine Direktive zu erstellen.Kann ich AngularJs-Direktiven verwenden, um einen Stil auf ein Pseudo-Element anzuwenden

Ich versuche eine Direktive zu erstellen, die die URL von einem Datenattribut ('background-image') übernimmt und diese als Hintergrundbild auf ein Pseudoelement anwendet, aber ich habe Probleme herauszufinden Zielen Sie auf das :: before-Element oder auch wenn Angular ein Pseudo-Element modifizieren kann.

Hier ist die Direktive ich zu bauen versuche: http://cdpn.io/cqvGH

ich es bekommen kann den Hintergrund anwenden, sondern auf div.item, wenn ich versuche, das :: vor keine Freude Ziel. Hier

ist die Richtlinie Code:

angular.module('testApp', [ 
]) 

angular.module('testApp') 
    .directive('backgroundImage', function(){ 
    return function(scope, element, attrs){ 
     restrict: 'A', 
     attrs.$observe('backgroundImage', function(value) { 
     // If I remove ::before it will apply image background to .item correctly. 
     element::before.css({ 
       'background-image': 'url(' + value +')' 
      }); 
     }); 
    }; 
}); 

Antwort

6

Es ist schwierig, aber möglich. Versuchen Sie so etwas wie:

var style = "<style>.item:before{background-image:url("+value+")}</style>" 
angular.element("head").append(style); 

Arbeiten hier: http://codepen.io/anon/pen/Difrt

+0

Wow, das ist genial! Ich habe nur noch einen Haken, denn jetzt wird der Stil nicht inline auf das Element angewendet, wenn ich mehr als ein Element habe und ich nicht beide dasselbe Hintergrundbild haben kann, wie der Hintergrund auf die Klasse .item gesetzt ist. Gibt es eine Möglichkeit, dies zu tun, aber es mit mehreren Elementen mit jeweils einem anderen Hintergrundbild arbeiten zu lassen? – Daimz

+0

Cherniv war absolut korrekt in Bezug auf meine ursprüngliche Frage und sein Code erstellt die :: vor Elemente, aber wenn Sie Bilder auf mehr als ein Element anwenden möchten, könnten Sie auch das Hintergrundbild auf eine Spanne anwenden, was ich entschieden habe zu tun (Wenn jemand einen Ansatz hat, dies mit :: bevor ich ganz Ohr bin) zu tun, zeigt dieser Link Ihnen, wie ich es gemacht habe. http://cdpn.io/cqvGH – Daimz

+1

@Daimz Sie können es tun, indem Sie die dynamische und einzigartige "ID" hinzufügen, werfen Sie einen Blick: http://codepen.io/anon/pen/enHxq – Cherniv

Verwandte Themen