Ich habe eine Baumstruktur. JSBIN hereWarum wird diese Funktion zweimal ausgeführt?
in der Richtlinie
scope.add_child_task = function() {
scope.add_task(scope.path,"child of " + scope.member.name);
if (!scope.has_children) {
scope.add_children_element();
scope.has_children = true;
}
};
in der Steuerung
$scope.add_task = function(to,name) {
DataFactory.add_task(to,name);
};
Die Fabrik ist die richtige Position zu finden, und das Hinzufügen des Knotens.
Beim Hinzufügen eines Kindes zu Knoten mit vorhandenen Kindern fügt es zwei Kinder hinzu und ich verstehe nicht warum.
Danke.
EDIT Ich kann has_children
verlieren und es produziert immer noch das gleiche Ergebnis
Mitglied Link functin
link: function (scope, element, attrs) {
element.append("<collection></collection>");
$compile(element.contents())(scope);
scope.get_path = function() {
var temp = scope.$parent.get_path();
temp.push(scope.member.name);
return temp;
};
scope.path = scope.get_path();
scope.add_child_task = function() {
scope.add_task(scope.path,"child of " + scope.member.name);
};
}
EDIT 2 Droped als auch die für Schleifen - nur den Austausch von Referenzen, nichts mehr übrig als eine Funktion, die e zweimal ausgetestet!
Dies ist nicht die Antwort, aber in "add_children_element()" Sie rufen "scope.has_children = true;" und auch "add_task()" auf. Überprüfen Sie, ob Sie diesen Fehler in Ihrer DataFactory nicht wiederholt haben, und versuchen Sie, (console.log) zu protokollieren, was der Code genau macht. – Neozaru
Ich glaube, Sie wollen 'this' in der ersten Funktion Körper, nicht' Scope' –
@Mark Reed - könnten Sie erklären? 'das' statt was? – haki