Skip to content

Instantly share code, notes, and snippets.

@frontainer
Created June 3, 2014 23:05
Show Gist options
  • Select an option

  • Save frontainer/54c159fb9b45488500f1 to your computer and use it in GitHub Desktop.

Select an option

Save frontainer/54c159fb9b45488500f1 to your computer and use it in GitHub Desktop.
改行コードを<br>に変換するAngularJSフィルタ
/**
* 改行コードをbrに変換するフィルタ
*/
angular.module('filters').filter('lineBreak', function () {
return function (input, exp) {
return input.replace(/\n|\r/g, "<br>");
}
});
@wildwest-service
Copy link

AngularJS v1.3.13で実装したところ、サニタイズが効いていて<br>がHTMLタグとして置換されなかったので、以下のように追記して使用しました。

    angular.module('filters').filter('lineBreak', function ($sce) {
        return function (input, exp) {
            return $sce.trustAsHtml(input.replace(/\n|\r/g, '<br>'));
        };
    });

また、<p ng-bind-html="sample | lineBreak"></p>のように、view側でngBindHtmlを併用する必要があります。


また、上記のfilterだけでは<br>以外のhtml要素が有効になってしまうので、さらに以下のようなソースコードにして使用しています。(この部分はもっとスマートな方法がある気もしています)

    angular.module('filters').filter('lineBreak', function ($sce) {
        return function (input, exp) {
            var replacedHtml = input.replace(/"/g, '&quot;').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
            return $sce.trustAsHtml(replacedHtml.replace(/\n|\r/g, '<br>'));
        };
    });

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment