Hat AngularJS einen Fehler bei der Verarbeitung einer benutzerdefinierten Direktive für ein HTML-Void-Element?

8

AKTUALISIEREN

  1. Erstens ist dies kein Bug in Angular (@PSL).
  2. Ich habe meine ursprüngliche Frage unten für historische Zwecke hinterlassen.
  3. Dies ist kein Fehler in der HTML-Spezifikation. Nachdem ich auf einige Links von Kommentaren (@zerflagL) geklickt habe, sehe ich, dass die HTML-Spezifikation besagt, dass VOID ELEMENTS nicht gleichbedeutend sind mit SELF CLOSING ELEMENTS (hier ist ein SO Q & amp; A zum Thema).
  4. OK, so beschissene Forschung meinerseits.
  5. Verdoppeln Sie sich dabei jedoch:

HTML sollte selbstschließende Tags enthalten (scheint es nicht mehr) und Geschwister sollten nicht magisch zu Sub-DOM-Elementen (innerHTML) werden.

Danke an @PSL, @shaunhusain und @zeroflagL, um mich klarzustellen.

Ich glaube, dass ich einen Fehler in der benutzerdefinierten Direktivenverarbeitung von Angular gefunden habe und möchte bestätigen, dass ich das Verhalten der benutzerdefinierten Richtlinie nicht missverstanden habe. Ich bin neu bei AngularJS, also habe ich vielleicht einen Fehler gemacht.

Es sieht so aus, als wenn Angular eine benutzerdefinierte Direktive für ein void-Element verarbeitet, eine unpassende DOM-Änderung auftritt und Peer-Elemente in den inneren HTML-Code verschoben werden. Hier ist etwas HTML:

%Vor%

Hier ist etwas JavaScript für Angular:

%Vor%

Das DOM nach der Angular-Verarbeitung (Browser-Web-Inspektion erforderlich) lautet:

%Vor%

Beachten Sie, wie die beiden Absatz-Tags in das voidtagtest-Element gezogen wurden?

W3C-Definition von VOID ELEMENT , falls Sie dies nicht wussten seine Syntax.

Hier ist ein JFiddle, der das ganze Biest implementiert.

Ist das ein Fehler oder fehlt mir etwas? Wenn es sich um einen Fehler handelt, empfehle ich Ihnen, wie ich einen Bug mit dem Angular-Team einreichen kann.

Danke.

    
Andrew Philips 14.09.2014, 03:24
quelle

2 Antworten

2

AKTUALISIERT

Kein AngularJS-Fehler. Siehe oben auf Frage für die Aktualisierung all dies.

OK, also dank @PSL (siehe Kommentar zu Frage), wurde mir bewusst, dass dies ein bekanntes Verhalten bei Angular ist. Ich sehe keinen triftigen Grund dafür, dass dieses Verhalten toleriert wird. Ich denke, dass Angular das beheben sollte und einen Kommentar in Github hinterlassen hat, der ihnen das sagt. Ich lasse diese Antwort hier für den Fall, dass jemand darüber stolpert, obwohl ich mich weigere, es als akzeptiert zu akzeptieren, da ich die Prämisse nicht annehme, dass dies richtiges Verhalten ist. Hoffentlich wird eine zukünftige Version dieses Problem beheben und jemand kann hier eine passende Antwort hinzufügen, die akzeptiert werden kann.

    
Andrew Philips 14.09.2014 04:33
quelle
1

Im Gegensatz zu früheren Versionen verfügt HTML 5 über sehr strenge Regeln für das Parsen der Quelle und das Erstellen des DOM. Das Verhalten eines Fehlers aufzurufen wäre falsch. 8.2.4 der Spezifikationen sagt

  

Wenn ein Start-Tag-Token mit seinem selbst schließenden Flag ausgegeben wird, wenn das Flag nicht bestätigt wird, wenn es von der Baumkonstruktionsphase verarbeitet wird, ist das ein Parse-Fehler.

Bei Tags wie input wird ausdrücklich

angegeben
  

Bestätigen Sie das selbstschließende Flag des Token, wenn es gesetzt ist.

Bei unbekannten Tags (die als "andere" bezeichnet werden) soll der Parser nicht die Flagge bestätigen. Der Browser ist also richtig, Angular ist unschuldig und wir können keine benutzerdefinierten selbstschließenden Tags verwenden. Wenn dieses Verhalten wünschenswert ist, ist eine andere Geschichte.

BTW: Ich mag, wie ein Parser das sarcasm -Tag handhaben muss;)

  

Ein End-Tag, dessen Tag-Name "Sarkasmus" lautet: Atmen Sie tief durch und gehen Sie dann vor wie im folgenden Eintrag "Any other end end" beschrieben.

    
zeroflagL 14.09.2014 16:54
quelle