[英]Convert multiline plain text to HTML paragraphs with AngularJS
我从我的后端获得了多行纯文本。
例如:
Lorem ipsum dolor sit amet, <strong>consectetur</strong> adipiscing elit.
Nunc porta velit ut nunc pretium, quis auctor nunc placerat.
In quis porta neque.
Fusce dapibus faucibus mi ut egestas.
<p>Phasellus egestas magna posuere, bibendum dui quis, lacinia nisl.</p>
我想用AngularJS作为HTML段落来渲染它。
所以这个例子将成为:
<p>Lorem ipsum dolor sit amet, <strong>consectetur</strong> adipiscing elit.</p>
<p>Nunc porta velit ut nunc pretium, quis auctor nunc placerat.
In quis porta neque.
Fusce dapibus faucibus mi ut egestas.</p>
<p><p>Phasellus egestas magna posuere, bibendum dui quis, lacinia nisl.</p></p>
请注意,初始纯文本中存在的所有HTML代码必须安全地转义(包括现有的<p>
),因此我不能只应用我的过滤器并在之后进行转义。
我认为这是一个3步骤的过程:
但我不确定实施每个步骤的最佳方法是什么。
你能用正确的方法向量引导我吗? 谢谢!
我想我终于解决了这个问题。 我希望这个答案会对某人有所帮助。
正如我前面提到的,这是一个3步骤的过程。
对于第一步,我试图找到一些现有的函数来逃避初始文本,但无济于事。 似乎AngularJS没有暴露任何这样做的方法(如果我错了,请纠正我)。 最后我创建了自己的过滤器来转义HTML:
myModule.filter('htmlEscape', function() {
return function(input) {
if (!input) {
return '';
}
return input.
replace(/&/g, '&').
replace(/</g, '<').
replace(/>/g, '>').
replace(/'/g, ''').
replace(/"/g, '"')
;
};
});
然后我创建了一个过滤器来将纯文本分成段落:
myModule.filter('textToHtml', ['$sce', 'htmlEscapeFilter', function($sce, htmlEscapeFilter) {
return function(input) {
if (!input) {
return '';
}
input = htmlEscapeFilter(input);
var output = '';
$.each(input.split("\n\n"), function(key, paragraph) {
output += '<p>' + paragraph + '</p>';
});
return $sce.trustAsHtml(output);
};
}])
我正在为它注入早期创建的htmlEscape
过滤器,并使用$sce.trustAsHtml
方法返回适合与ng-bind-html
指令一起使用的值。
最后我在部分模板中调用此过滤器,如下所示:
<div ng-bind-html="someText|textToHtml"></div>
这是结果:
我会考虑在Angular API中使用ng-sanitze模块。 我认为这应该涵盖你正在寻找的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.