angularJS繫結資料中對標籤轉義的處理
阿新 • • 發佈:2019-01-09
一、問題
預設情況下,angularJS繫結的資料為字串文字,不會對其中包含的html標籤進行轉義生成格式化的文字。在實際工作時碰到介面返回的資料帶有html格式時該如何處理。
二、解決辦法
1、引入angular-sanitize.js檔案,並在module定義時注入服務ngSanitize。(為了能使用ng-bind-html屬性)
var myApp = angular.module('myApp', ['ngSanitize'])
2、建立一個filter
myApp.filter('trustHtml', function ($sce) {
return function (input) {
return $sce.trustAsHtml(input);
}
});
//$sce是angularJS自帶的安全處理模組,$sce.trustAsHtml(input)方法便是將資料內容以html的形式進行解析並返回。
3、將此過濾器新增到ng-bind-html所繫結的資料中,便實現了在資料載入時對於html標籤的自動轉義。
<div ng-repeat="item in list" >
<div ng-bind-html="item.content |trustHtml"></div>
</div >
三、其他
本來到此,問題已經解決了。但是在實際運用中發現了另外一個小坑。某資料只在前端建立,在textarea裡編輯完並儲存後,從資料庫裡讀出來的格式與建立時不一致。後來發現是由於textarea裡的換行是\n指令控制,上傳資料即為\n格式,讀到html裡後,需要把\n轉換為<br>
,解決的辦法依舊採用filter。
app.filter('ntobr', function(){
var filter = function(input){
return input.replace(/\n/g,"<\/br>").replace(/ /g ," ");
};
return filter;
});
//此過濾器將textarea裡的\n和空格替換為html可以識別的標籤
<div ng-repeat="item in list" >
<div ng-bind-html="item.content | ntobr |trustHtml"></div>
</div>
//在繫結資料時只需要同時加入兩個過濾器即可