angularJS在進行數據綁定時默認是以字符串的形式數據,也就是對你數據中的html標簽不進行轉義照單全收,這樣提高了安全性,防止html標簽的注入攻擊,但有時候需要,特別是從數據庫讀取帶格式的文本時,無法正常的顯示在頁面中。
而要對html進行轉義,則需要在數據綁定的html標簽中使用ng-bind-html屬性,該屬性依賴與$sanitize,也就是需要引入angular-sanitize.js文件,并在module定義時注入該服務ngSanitize。比如:
html:
<span ng-controller = "myCtr" ng-bind-html = "htmlStr"></span>
javascript:
function myCtr($scope){ $scope.htmlStr = '<p style="color:white;background:#f60;"></p>';};
這樣可以實現html轉義,但是有個問題是style這種標簽會被angularJS認為是不安全的所以統統自動過濾掉,而為了保留這些就需要開啟非安全模式。
如何讓自動加載的數據轉義html標簽呢?實際上還有一種綁定方式:
html:
<div ng-repeat = "article in articles"> <div class="panel-heading"> <h4><b>{{article.title}}</b></h4> </div> <div class="panel-body"> <article id="word-display" ng-bind-html="article.content | trustHtml"> </article> </div></div>
javascript:
success(function(data){ $scope.articles = data;});myApp.filter('trustHtml',function($sce){ return function(input){ return $sce.trustAsHtml(input); }});
其中$sce是angularJS自帶的安全處理模塊,$sce.trustAsHtml(input)方法便是將數據內容以html的形式進行解析并返回。將此過濾器添加到ng-bind-html所綁定的數據中,便實現了在數據加載時對與html標簽的自動轉義。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答