angularjs filtro di nuova riga senza altri html

2022-07-29 12:00:24

Sto cercando di convertire i caratteri di nuova riga (\n) in html br.
Secondo questa discussione nel gruppo Google, ecco cosa ho:< /p>

myApp.filter('newlines', function () {
    return function(text) {
        return text.replace(/\n/g, '<br/>');
    }
});

La discussione lì consiglia anche di utilizzare quanto segue nella vista:

{{ dataFromModel | newline | html }}

Sembra utilizzare il vecchio filtro html, mentre ora dovremmo utilizzare l'attributo ng-bind-html.

Indipendentemente da ciò, questo pone un problema: non voglio che alcun HTML dalla stringa originale (dataFromModel) venga visualizzato come HTML; solo i br.

Ad esempio, data la seguente stringa:

Mentre 7 > 5
Non voglio ancora html e roba qui...

Vorrei che emettesse:

While 7 &gt; 5<br>I still don't want html &amp; stuff in here...

C'è un modo per farlo?

- MegaHit

Source
Risposta


88
  • Invece di pasticciare con le nuove direttive, ho deciso di utilizzare solo 2 filtri:

    App.filter('newlines', function () {
        return function(text) {
            return text.replace(/\n/g, '<br/>');
        }
    })
    .filter('noHTML', function () {
        return function(text) {
            return text
                    .replace(/&/g, '&amp;')
                    .replace(/>/g, '&gt;')
                    .replace(/</g, '&lt;');
        }
    });
    

    Quindi, a mio avviso, convoglio l'uno nell'altro:

    <span ng-bind-html-unsafe="dataFromModel | noHTML | newlines"></span>