我正在尝试使用多个过滤器,如下所示
<p><span ng-bind-html="someVar | nl2br | linky"></span></p>
Run Code Online (Sandbox Code Playgroud)
什么都没有.但是,当我更改过滤器的顺序如下
<p><span ng-bind-html="someVar | linky | nl2br"></span></p>
Run Code Online (Sandbox Code Playgroud)
linky工作,但是nl2br无法将换行符转换为br.
以下实现可用于nl2br:
.filter('nl2br', function($sce) {
return function(input) {
return $sce.trustAsHtml( input.replace(/\n/g, '<br>') );
}
}
Run Code Online (Sandbox Code Playgroud)
所以我能够使用它someVar | linky | nl2br.问题在于链接过滤器.ngSanitize的linky过滤器分别将\ r和\n更改为 和 .给定nl2br过滤器无法捕获那些.
感谢这个要点https://gist.github.com/kensnyder/49136af39457445e5982,修改后的nl2br如下
angular.module('myModule')
.filter('nl2br', ['$sanitize', function($sanitize) {
var tag = (/xhtml/i).test(document.doctype) ? '<br />' : '<br>';
return function(msg) {
// ngSanitize's linky filter changes \r and \n to and respectively
msg = (msg + '').replace(/(\r\n|\n\r|\r|\n| | | | )/g, tag + '$1');
return $sanitize(msg);
};
}]);
Run Code Online (Sandbox Code Playgroud)
工作小提琴http://jsfiddle.net/fxpu89be/4/
但是,它仍然没有解决以相反顺序使用它的原始问题,即 someVar | nl2br | linky