So verhindern Sie doppelte Attribute in der eckigen Anweisung, wenn replace = true ist

8

Ich habe festgestellt, dass eckige Direktiven, die replace: true angeben, Attribute aus der Direktivenverwendung in die von der Vorlage gerenderte Ausgabe kopieren. Wenn die Vorlage das gleiche Attribut enthält, werden sowohl der Vorlagenattributwert als auch der Attributwert der Direktive in der endgültigen Ausgabe kombiniert.

Nutzung der Richtlinie:

%Vor%

Richtlinie:

%Vor%

Ausgabe:

%Vor%

Das Leerzeichen in bar="one " verursacht Probleme, ebenso wie mehrere Werte in baz . Gibt es eine Möglichkeit, dieses Verhalten zu ändern? Ich erkannte, dass ich in meiner Direktive nicht in Konflikt stehende Attribute verwenden konnte und sowohl die Vorlagenattribute als auch die nicht in Konflikt stehenden Attribute in der Ausgabe hatte. Aber ich möchte in der Lage sein, die gleichen Attributnamen zu verwenden und die Ausgabe der Vorlage besser zu steuern.

Ich könnte eine link -Methode mit element.removeAttr() und element.attr() verwenden. Es scheint nur, als sollte es eine bessere Lösung geben.

Schließlich ist mir klar, dass die Rede davon ist, remove: true abzulehnen, aber es gibt berechtigte Gründe dafür, sie beizubehalten. In meinem Fall brauche ich es für Anweisungen, die SVG-Tags mit der Einfügung generieren. Siehe hier für Details: Ссылка

    
Tauren 22.11.2014, 09:06
quelle

2 Antworten

7

Nein, es gibt keine nette deklarative Methode, Angular mitzuteilen, wie das x -Attribut zusammengeführt oder manipuliert werden sollte, wenn es in Vorlagen transplantiert wird.

Angular führt tatsächlich eine direkte Kopie von Attributen von der Quelle zum Zielelement (mit einigen Ausnahmen) durch und führt Attributwerte zusammen. Sie können dieses Verhalten in der Funktion mergeTemplateAttributes sehen der Angular Compiler.

Da Sie dieses Verhalten nicht ändern können, können Sie mit den Eigenschaften compile oder link der Richtliniendefinition einige Attribute und deren Werte steuern. Es ist wahrscheinlich sinnvoller, wenn Sie in der Kompilierungsphase statt in der Linkphase eine Attributmanipulation durchführen, da diese Attribute zum Zeitpunkt der Ausführung von Linkfunktionen "bereit" sein sollen.

Sie können so etwas tun:

%Vor%     
user2943490 28.11.2014, 00:47
quelle
3

Es wäre hilfreich zu wissen, wie Sie erwarten, dass die Werte zusammengeführt werden. Hat die Vorlage die Priorität, das Element oder ist eine Art Zusammenführung erforderlich?

Da ich nur eine Annahme machen kann, nimmt der folgende Code an, dass Sie Attribute aus der Vorlage entfernen möchten, die auf dem Element vorhanden sind.

%Vor%     
Enzey 03.12.2014 00:32
quelle