1. ホーム
  2. javascript

[解決済み] angularjs の改行フィルタ、他の html を使用しない

2023-04-20 12:29:16

質問

改行文字を変換しようとしています ( \n ) を html br 's.

のように Google グループでのこの議論 に従って、私が得たものは次のとおりです。

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

また、そこでの議論では、ビューの中で次のように使用することが勧められています。

{{ dataFromModel | newline | html }}

これは、古い html フィルタを使っているようですが、現在は ng-bind-html 属性を使うことになっています。


ともかく、これには問題があります。私は元の文字列からどんなHTMLも欲しくありません ( dataFromModel ) から HTML としてレンダリングされることを望まないからです。 br 's.

例えば、次のような文字列があった場合。

7の間 > 5

やっぱりここにhtml &系はいらないか...。

出力して欲しいですね。

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

これを実現する方法はないのでしょうか?

どのように解決するのですか?

新しいディレクティブをいじくる代わりに、2つのフィルターだけを使うことにしました。

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;');
    }
});

そして、私の見解では、一方を他方にパイプします。

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