Soweit ich festgestellt habe Angular kompiliert Dinge auf einer first-come, first-serve-Basis, die eine Art schwierig ist. Ich habe eine Direktive gemacht, die einige Elemente umschließt und ich möchte eine Link-Eigenschaft haben, die nach Inhalten im Inhalt sucht.AngularJS Reihenfolge ändern, welche Direktiven zusammengestellt werden
Für einen konkreten Anwendungsfall: Ich mache eine Eingabe-Label-Richtlinie, die für den ersten Eingang in den Inhalt aussieht und fügt eine zufällig generierte id
zum input
und ein for
Attribut auf den label
Hier ist der Code :
// Find the first element with the attribute ng-label-target or the first input and links a label to it
app.directive('ngLabel', function() {
return {
restrict: 'E',
replace: true,
transclude: true,
scope: {
label: '@',
},
template: '<span class="ng-label">' +
'<label class="ng-label-text">{{label}}</label>' +
'<span class="ng-label-content" ng-transclude></span>' +
'</span>',
link: function (scope, element, attrs) {
scope.id = scope.id || 'random-id-' + Math.floor(Math.random() * 90000000);
angular.element(element[0].querySelector('.ng-label-text')).
attr({for:scope.id});
var target = angular.element(element[0].querySelector('[ng-label-target]'));
if (!target || target.length == 0) {
target = angular.element(element[0].querySelectorAll('input,select,textarea')[0]);
}
target.attr({id:scope.id});
},
};
});
Verwendungsbeispiel:
<ng-label label="Text:">
<input type="text" ng-model="page.textColor" size="5" maxlength="7" placeholder="e.g. #000" required />
<input ng-label-target type="color" ng-model="page.textColor" required />
</ng-label>
Das allein wirkt wie ein Zauber.
Aber jetzt möchte ich automatisch mehrere Eingaben generieren und den Label-Punkt auf den ersten haben. Das Problem ist, dass wenn ich eine ng-repeat
innerhalb meiner ng-label
dann ng-repeat
Code wird generiert, nachdem meine Anweisung wurde verarbeitet, so dass nichts tatsächlich gefunden wird.
Daher ist meine Frage: Gibt es eine Möglichkeit, in der Sie Winkel angeben können, um verschachtelte Direktiven von innen nach außen auszuwerten anstatt umgekehrt?
Oder gibt es einen Weg, dies zu tun, als ich gerade mache?
Ich machte eine Fiedel, um die Reihenfolge zu illustrieren, in der Zeug ausgewertet wird. Sie sehen, dass die äußere-Richtlinie einen kleineren oder gleichen Wert hat, als es Inhalt ist (nicht niedriger als Mikrosekunden gehen kann, damit ich ein paar Wiederholungen zu tun hatte):
sicher sieht viel komplizierter als nötig sein ... Demo zur Verfügung gestellt hat zu viel Rekursion, bieten Demo mit Ihrer Anweisung und Markup. Sie können finden, dass Plunker einfacher ist, eckige Demos mit als Geige zu erstellen – charlietfl
Warum muss das 'id' zufällig sein? Kannst du nicht einfach 'id =" name _ {{$ index}} "' 'und das selbe für das Label benutzen? –
Ich möchte nicht die ID angeben, da ich es im Allgemeinen nicht brauche, deshalb ist es zufällig, wenn es nicht angegeben wird – Stefan