2016-07-01 13 views
1

In dieser plunk habe ich eine Direktive, die Elemente an das DOM anfügt. Wenn ich versuche, children() in einer Schleife zu verwenden, bekomme ich eine Ausnahme, dass forEach keine Funktion ist. Da children() ein Array zurückgibt, habe ich erwartet, dass dies funktioniert. Wie bekomme ich die Kinder?Looping durch untergeordnete Elemente des DOM-Elements in der Direktive

Javascript:

directive.link = function (scope, element, attrs) { 

    var wrap = angular.element('<div id="wrap"></div>'); 
    var wrapc = $compile(wrap)(scope) 
    element.append(wrapc); 

    var node1 = angular.element('<div id="node1"></div>'); 
    var node1c = $compile(node1)(scope) 
    wrapc.append(node1c); 

    var node2 = angular.element('<div id="node2"></div>'); 
    var node2c = $compile(node2)(scope) 
    wrapc.append(node2c); 

    var children = wrapc.children(); 
    children.forEach(function(elem){ // <-- this doesn't work 
     console.log(elem.attr('id')); 
    }); 

}; 
+1

Überprüfen Sie, ob 'Kinder()' Methode ein Versprechen gibt, ich am Ende in der Regel in Versprechen Bumping-Arrays/Objekte zu erwarten. – M22an

+0

nein, es scheint kein Versprechen zu geben – ps0604

+0

Hmm, Angulars Dokumentation für dieses 'angular.element.children()' verweist auf das jQuery-Äquivalent. Was bekommen Sie, wenn Sie die Variable 'children' protokollieren? – M22an

Antwort

3

Ich weiß nicht, ob das, was Sie erreichen müssen, aber ich würde es so schreiben:

var children = wrapc.children(); 
angular.forEach(children, function(value, key){ 
    console.log(children[key].id)); 
}); 
+0

Ich wünschte, das funktioniert. Warum nicht? –