[英]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.