1. 程式人生 > >angularJS繫結資料中對標籤轉義的處理

angularJS繫結資料中對標籤轉義的處理

一、問題

預設情況下,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
,"&nbsp;"); }; return filter; }); //此過濾器將textarea裡的\n和空格替換為html可以識別的標籤
<div ng-repeat="item in list" >
        <div ng-bind-html="item.content | ntobr |trustHtml"></div>
</div>
//在繫結資料時只需要同時加入兩個過濾器即可