Ich versuche, Zeilenumbrüche ( \n
) in HTML umzuwandeln br
.
Gemäß dieser Diskussion in der Google-Gruppe habe ich Folgendes:
myApp.filter('newlines', function () {
return function(text) {
return text.replace(/\n/g, '<br/>');
}
});
In der dortigen Diskussion wird außerdem empfohlen, in der Ansicht Folgendes zu verwenden:
{{ dataFromModel | newline | html }}
Dies scheint den alten html
Filter zu verwenden, während wir jetzt das ng-bind-html
Attribut verwenden sollen.
Unabhängig davon stellt dies ein Problem dar: Ich möchte nicht, dass HTML aus der ursprünglichen Zeichenfolge ( dataFromModel
) als HTML gerendert wird. nur die br
's.
Beispiel: Geben Sie die folgende Zeichenfolge ein:
Während 7> 5
möchte ich immer noch kein HTML & Zeug hier ...
Ich möchte, dass es ausgegeben wird:
While 7 > 5<br>I still don't want html & stuff in here...
Gibt es eine Möglichkeit, dies zu erreichen?
quelle
pre-line
ist es wahrscheinlich im Allgemeinen besser, da lange Zeilen umbrochen werden (wie bei allen<br>
basierten Lösungen).pre-wrap
scheint das zu sein, was die meisten Leute wollen (keine Vorzeile): "Leerzeichen werden vom Browser beibehalten. Text wird bei Bedarf umbrochen und in Zeilenumbrüchen" von w3schoolsAnstatt mit neuen Anweisungen herumzuspielen, habe ich mich entschieden, nur zwei Filter zu verwenden:
Dann leite ich aus meiner Sicht eins in das andere:
quelle
text.replace(/\\n/g, '<br />')
oder noch bessertext.replace(/(\\r)?\\n/g, '<br />')
Eine einfachere Möglichkeit, dies zu tun, besteht darin, einen Filter zu erstellen, der den Text jeweils
\n
in eine Liste aufteilt, und dann `ng-repeat zu verwenden.Der Filter:
und im HTML:
quelle
<p ng-repeat="line in (line.message | newlines)">{{line}}</p>
track by
bei doppelten Zeilen, die einen Fehler auslösen würden :line in (text | newlines) track by $index
.Wenn Sie das Layout nicht mit endlosen Zeichenfolgen zerstören möchten, verwenden Sie die Vorzeile:
quelle
Ich weiß nicht, ob Angular einen Dienst zum Entfernen von HTML hat, aber es scheint, dass Sie HTML entfernen müssen, bevor Sie Ihren
newlines
benutzerdefinierten Filter übergeben. Die Art und Weise, wie ich es tun würde, ist durch eine benutzerdefinierteno-html
Direktive, die eine scope-Eigenschaft und den Namen eines Filters übergeben würde, der nach dem Entfernen des angewendet werden sollhtml
Hier ist die Implementierung
Das wichtige Bit ist die
text
Variable. Hier erstelle ich ein DOM-Zwischenelement und hänge es mit derhtml
Methode an den HTML-Code an und rufe dann nur den Text mit dertext
Methode ab. Beide Methoden werden von Angulars Lite-Version von jQuery bereitgestellt .Im folgenden Teil wird der
newline
Filter angewendet, der mithilfe des$filter
Dienstes ausgeführt wird.Überprüfen Sie den Plunker hier: http://plnkr.co/edit/SEtHH5eUgFEtC92Czq7T?p=preview
quelle
Ein Update des Filters mit ng-bind-html wäre derzeit:
und der noHTML-Filter wird nicht mehr benötigt.
Die White-Space-Lösung bietet nur geringe Browserunterstützung: http://caniuse.com/#search=tab-size
quelle
Etwas spät zur Party, aber ich würde eine kleine Verbesserung vorschlagen, um nach undefinierten / Null-Strings zu suchen.
Etwas wie:
Oder (etwas enger)
quelle