Angular.js: Wie kann ich die von ng-if und ng-repeat erstellten Kommentare entfernen?

Erstellt am 22. Aug. 2014  ·  40Kommentare  ·  Quelle: angular/angular.js

Gibt es eine Möglichkeit, zu verhindern, dass Angular HTML-Hilfskommentare erstellt? Beispielsweise,

<div ng-include="myTemplate"></div>
Wird sich in sowas verwandeln

<!-- ngInclude: 'hurr-durr.html' -->
<div ng-include="myTemplate"></div>

Wie kann ich das stoppen?

$compile won't fix inconvenient

Hilfreichster Kommentar

Die Kommentare werden eine Produktlogik zeigen, die ich nicht von anderen möchte
sehen.

2014-08-26 7:05 GMT+08:00 Brian Ford [email protected] :

@cc17 https://github.com/cc17 warum willst du diese loswerden
Elemente? Es gibt wahrscheinlich einen besseren Weg, um Ihr Ziel zu erreichen.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/angular/angular.js/issues/8722#issuecomment -53349716.

Alle 40 Kommentare

Ich kann Ihnen nicht sagen, wie es intern funktioniert, aber angle benötigt diese Kommentare, um Anweisungen zu verfolgen, die möglicherweise tatsächliche DOM-Knoten als Ausgabe haben oder nicht. Wenn ngIf beispielsweise false ist, gibt es keinen DOM-Knoten, aber der Angular-Compiler benötigt den Kommentar, um zu wissen, an welcher Position im Baum sich die Direktive befindet. Ich bin sicher, jemand anderes, zum Beispiel @caitp, kann dies besser erklären.

@cc17 warum willst du diese Elemente loswerden? Es gibt wahrscheinlich einen besseren Weg, um Ihr Ziel zu erreichen.

Die Kommentare werden eine Produktlogik zeigen, die ich nicht von anderen möchte
sehen.

2014-08-26 7:05 GMT+08:00 Brian Ford [email protected] :

@cc17 https://github.com/cc17 warum willst du diese loswerden
Elemente? Es gibt wahrscheinlich einen besseren Weg, um Ihr Ziel zu erreichen.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/angular/angular.js/issues/8722#issuecomment -53349716.

Ich habe @cc17 zugestimmt. Auch ich möchte das Gleiche erreichen.

@cc17 Ich würde das gerne verstehen. Angular benötigt diese Kommentarknoten aus Gründen, die außerhalb dieses Themas liegen.
Jetzt hast du gesagt

Die Kommentare werden eine Produktlogik zeigen, die andere Leute nicht sehen sollen

Sagst du das

  • Sie möchten, dass die Kommentarknoten keine Informationen anzeigen? Dh wenn dies leere Kommentarknoten wären, wäre das in Ordnung
  • Die Kommentarknoten sollten überhaupt nicht da sein

Wenn Sie von der ersten Option sprechen, kann dies meiner Meinung nach etwas langwierig sein, aber es besteht eine gewisse Chance, dass ein Opt-In hinzugefügt werden kann. Wenn Sie von der zweiten Option sprechen, würde deren Entfernung eine umfassende Überarbeitung der Funktionsweise der Richtlinienumsetzung bedeuten, und ich bezweifle, dass dies bald geschehen wird.

@lgalfaso

Sie möchten, dass die Kommentarknoten keine Informationen anzeigen? Dh wenn dies leere Kommentarknoten wären, wäre das in Ordnung

Ich könnte sagen, das wäre eine Option.

@lgalfaso ja erste Option in Ordnung. Machen Sie einen wesentlichen Kommentartext verfügbar, der das Verhalten der gegenwärtigen Direktiven nicht bricht.

Ich bin hierher gekommen, um nach den gleichen Antworten auf das gleiche Problem zu suchen, aber aus anderen Gründen (es war nur wirklich nervig, die DOM-Elemente mit einer Million Kommentaren im Weg zu debuggen).

Anderen Leuten zuzuhören, die Angulars Abhängigkeit von den Kommentaren beschreiben, macht Sinn. Um meine zwei Cent zu Ihrem Anliegen hinzuzufügen, die App-Logik zu verbergen. Angular ist Javascript, und wie wir alle wissen, gibt es keine Möglichkeit, Ihren Javascript-Code wirklich vor Benutzern zu schützen, die wirklich einen Blick darauf werfen und sehen möchten, was Sie unter der Haube haben. Das Entfernen der Kommentare würde meiner Meinung nach nur Gelegenheitsspäher davon abhalten, einen Blick auf Ihre Logik zu werfen. Es wird einen Angreifer nicht abschrecken, und ich wäre sehr überrascht, wenn ein Angreifer Ihre kantigen Kommentare sogar als Weg zum Auffinden einer möglichen Offenlegung oder Schwachstelle in Ihrem Code betrachten würde.

@cc17
"Die Kommentare werden eine Produktlogik zeigen, die andere Leute nicht sehen sollen."
? Um die Kommentare anzuzeigen, müssen Sie die Entwicklertools des Browsers öffnen.
Dort wird ALLE Ihre Produktlogik (Frontend-Teil) angezeigt! Ihr HTML (Original und aktuell), Javascript, Netzwerkanfragen...

@meeresfresser
"es war nur wirklich nervig, die DOM-Elemente mit einer Million Kommentaren im Weg zu debuggen"
Ich frage mich, welche eckige Seite (mit einer akzeptablen Reaktionszeit ;-) ) Sie erstellen können, um "eine Million Kommentare" zu generieren

+1

Ich möchte auch eine Option zum Entfernen von Kommentaren aus dem Live-HTML sehen. In meinen Augen ist es hässlich und ablenkend. Im Gegensatz zu meinem Texteditor ist die Entwicklerkonsole 1/3 der Seite hoch, und daher sind diese zusätzlichen Kommentare wirklich fehlerhaft.

Gibt es weitere Details dazu, warum genau Angular diese benötigt?

Hässlich und ablenkend ist kein sehr starker Grund. 😉
Die Kommentare werden von angle als Markierungen für Inhalte verwendet, die
dort eingefügt. Beispielsweise benötigen ngIf-Elemente, die nicht angezeigt werden, dies.
Daher glaube ich nicht, dass es eine realistische Chance gibt, dass sie es jemals sein werden
ENTFERNT. Angular 2 sollte theoretisch das gleiche Problem haben, aber vielleicht ist es das
dort anders.
Am 10.02.2016 19:16 schrieb "Alistair G MacDonald" < [email protected]

:

+1

Ich möchte auch eine Option zum Entfernen von Kommentaren aus dem Live-HTML sehen.
In meinen Augen ist es hässlich und ablenkend.

Gibt es weitere Details dazu, warum genau Angular diese benötigt?


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/angular/angular.js/issues/8722#issuecomment -182509708
.

Ja, ng2 hat auch Kommentare zu strukturellen Richtlinien. (Ich glaube, sie haben <script> Elemente verwendet, wechseln aber irgendwann zu Kommentaren, weil die Elemente CSS-Selektoren iirc zerstört haben.)

Ja, verstanden @ Narretz , Hässlichkeit ist vielleicht nicht sehr motivierend, aber es ist unklar, was der tatsächliche Kompromiss war / ist. Ist die Leistung besser, wenn vorhandene DOM-Knoten verwendet werden? Ich kann mir nicht vorstellen, dass das einen großen Unterschied machen würde (vielleicht liege ich damit ganz daneben). Oder war es einfach einfacher, die DOM-Knoten zu durchlaufen, als ein JavaScript-Array zu erstellen?

@F1LT3R , die Kommentarknoten sind als Markierungen vorhanden. Sie sind für den Fall erforderlich, dass der Inhalt nicht angezeigt wird (zB ein ngIf Ausdruck, der zu false ausgewertet wird, ein ngSwitchWhen Wert, der nicht mit dem aktuellen ngSwitch Ausdruck übereinstimmt usw.). In diesem Fall benötigen wir einen Platzhalter im DOM, um zu wissen, wo die eigentlichen Elemente später eingefügt werden sollen (zB wenn der Ausdruck ngIf wahr ergibt usw.).

Ich hoffe es wird eine Option dafür geben.

Einen Kommentar wie diesen zu hinterlassen halte ich für keine gute Idee
<!-- ngIf: transaction.status==9 && transaction.status!==8 -->

@codetrash , wenn du eine bessere Idee hast, sind wir ganz Ohr :smiley:

@codetrash warum ist das keine gute idee?

@Narretz für eine ziemlich sensible Anwendung wie Banking, Zahlungsdienst usw. ...

!-- ngIf: transaction.status==9 && transaction.status!==8 -->

zu einer gefährlichen Situation führen könnte.

@gkalpak vielleicht

@codetrash Das Ausdrucks-Markup basiert auf Ihrem Javascript-Code, der dem Benutzeragenten sowieso ausgesetzt ist. Das Verschleiern Ihres Javascript-Codes kann das Abrufen der Informationen erschweren, aber Ihre Anwendungslogik kann trotzdem extrahiert werden. Wir könnten natürlich versuchen, den Ausdruck zu entfernen / zu verschleiern, aber ich persönlich denke, dass hier kein Sicherheitsrisiko besteht und er eine niedrige Priorität hat. Wenn jemand es versuchen möchte, sind Sie herzlich willkommen, obwohl ich nicht garantieren kann, dass es zusammengeführt wird.

Danke @gkalpak , macht Sinn. Ich konnte verstehen, warum der Versuch, die DOM-Änderungen in JS zu verfolgen, für Leistung und Wartbarkeit ziemlich unpraktisch sein könnte. Ich nehme an, wenn wir sagen könnten "Angular steuert alle Dinge im DOM", wäre es vielleicht etwas machbarer, aber Angular neigt dazu, mit allen Arten von Bibliotheken von Drittanbietern zusammenzuarbeiten, also ... eh. Das "kleinere von zwei Übeln".

@codetrash
<könnte in eine gefährliche Situation führen>>
?? Dieser Code ist nichts mehr, was Sie in der ersten Stufe ohnehin im Klartext im HTML-Code lesen können, also ...

+1.

@smurugavel Bitte

@Narretz , wie @cc17 sagte, war Geschäftslogik mein Anliegen, die von anderen nicht gesehen werden muss, die den Quellcode durch Entwicklertools sehen können.
Als ich die Vorschläge in diesem Thread durchging , war die erste Option von
Kann das Angular-Team alternativ diese Kommentare verschlüsseln, die ein Mensch nicht lesen kann, oder eine eindeutige Kennung hinzufügen, die Angular intern verfolgen kann? nur meine gedanken..

@smurugavel , wie bereits in diesem Thread erwähnt, enthalten diese Kommentare nichts, was nicht bereits als Klartext in Ihren Vorlagen sichtbar ist. Wer Ihren Quellcode sehen kann, kann diese Geschäftslogik sehen. Das Entfernen der Kommentare wird Ihr Problem nicht lösen.

Ich hoffe, dass es eine Option zum Entfernen und erneuten Abrufen dieser Filterung geben wird.

Einen Kommentar wie diesen zu hinterlassen halte ich für keine gute Idee

Was sonst, wenn ich zu diesem Zeitpunkt einen Filter anwenden und ul li erneut verwenden muss, wird mein kommentierter li-Wert wieder angezeigt.

@ManishLSN , nicht sicher, was Sie meinen. Es gibt keinen Kommentar li . Nur ein einfacher HTML-Kommentar.
Trotzdem halte ich es für sinnvoll, leere Kommentare zu haben, wenn debug info deaktiviert ist (der Inhalt der Kommentare dient keinem anderen Zweck als der "Debugability").

WDYT @Narretz , @lgalfaso ?

Auch hier (für Leute, die diese Bedenken geäußert haben) wird dies keine Auswirkungen auf die Sicherheit haben.

Wir brauchen Kommentarknoten im DOM oder Angular funktioniert einfach nicht.
Wir können die Idee implementieren, den Text des Kommentars zu entfernen, wenn debugInfo deaktiviert ist. Dies ist eine ziemlich einfache Änderung. PRs jemand?

Danke !!!

@codetrash Dies ist geschlossen und ich denke, es ist gut, um die Logik vor dem Inspektor zu "verstecken". Aber wie bereits erwähnt, werden Ihr reines HTML und JS an den Browser geliefert, daher sollte es in keiner Weise als sicherer angesehen werden. Dies könnte wahrscheinlich viel besser geschützt werden, indem Server-Side-Angle mit 2.0 verwendet wird. Auf jeden Fall ist die einzige "riskante Situation", die ich sehen könnte, wenn sie Werte im Inspektor ändern und entweder Daten anzeigen oder speichern könnten, die sie nicht können sollten - aber dies könnte verhindert werden, indem diese Daten dem Modell nicht bereitgestellt werden den ersten Platz. Es sollte als schlechte Praxis angesehen werden, sensible Daten vom Server zu senden, wenn diese vor dem Benutzer verborgen sein sollen – mit anderen Worten, Berechtigungen sollten serverseitig erzwungen werden, insbesondere für Bankgeschäfte, Zahlungsdienste usw. Alles, was an den Browser gesendet wird, sollte als öffentlich zugänglich angesehen.

Das ist ein interessanter Anwendungsfall von Akuno. Ich kann einstellen warum das so ist
frustrierend.

Ich denke, in der Praxis möchte man bestimmte Elemente sogar in einem herausfiltern
Nicht-Angular-Szenario. Ich Frames, Kommentare usw.

Mehr Arbeit zu implementieren, ja, aber eine sauberere, besser kontrollierbare Pipeline
zwischen einem Format und einem anderen ist wahrscheinlich eine gute Idee.
Am 25. März 2016 um 02:55 Uhr schrieb "akunno" [email protected] :

Ich hoffe, ich verstehe das richtig, denn ich sitze in einem ähnlichen Boot.

Derzeit enthält mein Dom viele Kommentare und Bilder wie diese:

Wenn ich innerHTML auf dem übergeordneten Element des Elements aufrufe, habe ich am Ende etwas
so was:

ng-src="data:image/gif;base64,....">

Mir ist keine Möglichkeit bekannt, den HTML-Code ohne die Winkelanweisungen zu extrahieren.
Ich versuche, das gerenderte HTML ohne Angular zu extrahieren, weil ich vorbeikomme
dies zu einem Konverter, der daraus ein Word-Dokument erstellt. Derzeit ist das Wort
doc enthält eine Reihe von Image-Tags mit roten X, weil es noch versucht wird
um das Bild so zu rendern, als ob es ein Bild wäre. Die Kommentare sind auch massiv
Erhöhen der Größe der Zeichenfolge.

Ich habe versucht, die Kommentare zu entfernen, aber ich kann immer noch keinen Weg finden
um das gerenderte HTML zu extrahieren, ohne dass es durch Winkelanweisungen verschmutzt wird.
Wenn ich innerHTML aufrufe, wollte ich idealerweise sehen wenn die
ngIf war true oder alternativ nichts, wenn ngIf false zurückgab.

Ich hoffe, ich verstehe das richtig und das ist ein +1 für eine Möglichkeit
um die gerenderte Ausgabe irgendwie ohne Kommentare/Anweisungen zu extrahieren.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/angular/angular.js/issues/8722#issuecomment -201172995

ein weiterer Anwendungsfall: Überspringen von Zeilenumbrüchen in der Konfiguration für css:empty pseudo, um zum Laufen zu kommen https://css-tricks.com/almanac/selectors/e/empty/

@mashpie ist gerade auf den gleichen Anwendungsfall

Angular fügt keine Zeilenumbrüche um die Markerkommentare hinzu. Siehe http://plnkr.co/edit/z1rJZd7yU0TYZmDAynTh?p=preview

Sie können dies tun, indem Sie verwenden.

app.config(['$compileProvider', Funktion ($compileProvider) {
// Debug-Info deaktivieren
$compileProvider.debugInfoEnabled(false);
}]);

@RHanmant Dies entfernt die Kommentare nicht vollständig, sondern entfernt nur Variablen- / Eigenschaftsnamen aus den Kommentaren. Die Kommentare sind notwendig.

Ich bin zu diesem Problembericht gekommen, als ich versucht habe, eine CSS-Regel wie #mydiv > div:last-child und das div, das das letzte Kind sein sollte, lag nicht an dem anschließenden anglejs-Kommentar.

CSS-Selektoren ignorieren Kommentare, sodass das, was Sie beschrieben haben, nicht passieren kann.

Ich hoffe es wird eine Option dafür geben.

Einen Kommentar wie diesen zu hinterlassen halte ich für keine gute Idee
<!-- ngIf: transaction.status==9 && transaction.status!==8 -->

Ja, jeder wird wissen, dass der Entwickler zu faul war, einige Konstanten anstelle von hartcodierten Werten hinzuzufügen :).
Und ja, es gibt ein bisschen Offenlegung (weil es sich im Frontend befindet), aber wenn Sie die Rückseite gründlich desinfizieren, wird niemand diese "durchgesickerten" Informationen ausnutzen. Ich denke, wir sollten uns auf diesen Teil konzentrieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen