angular js的強大之處之一就是他的數據雙向綁定這一牛B功能,我們會常常用到的兩個東西就是ng-bind和針對form的ng-model。但在我們的項目當中會遇到這樣的情況,后台返回的數據中帶有各種各樣的html標簽。如:
$scope.currentWork.description = “hello,<br><b>今天我們去哪里?</b>”
我們用ng-bind-html這樣的指令來綁定,結果卻不是我們想要的。是這樣的
hello,
今天我們去哪里?
怎么辦呢?
對於angular 1.2一下的版本我們必須要使用$sce這個服務來解決我們的問題。所謂sce即“Strict Contextual Escaping”的縮寫。翻譯成中文就是“嚴格的上下文模式”也可以理解為安全綁定吧。來看看怎么用吧。
controller code:
$http.get('/api/work/get?workId=' + $routeParams.workId).success(function (work) {$scope.currentWork = work;});
HTML code:
<p> {{currentWork.description}}</p>
我們返回的內容中包含一系列的html標記。表現出來的結果就如我們文章開頭所說的那樣。這時候我們必須告訴它安全綁定。它可以通過使用$ sce.trustAsHtml()。該方法將值轉換為特權所接受並能安全地使用“ng-bind-html”。所以,我們必須在我們的控制器中引入$sce服務
controller('transferWorkStep2', ['$scope','$http','$routeParams','$sce', function ($scope,$http, $routeParams, $sce) {
$http.get('/api/work/get?workId=' + $routeParams.workId)
.success(function (work) {
$scope.currentWork = work;
$scope.currentWork.description = $sce.trustAsHtml($rootScope.currentWork.description);
});
html code:
<p ng-bind-html="currentWork.description"></p>
這樣結果就完美的呈現在頁面上了:
hello
今天我們去哪里?
咱們還可以這樣用,把它封裝成一個過濾器就可以在模板上隨時調用了
app.filter('to_trusted', ['$sce', function ($sce) {
return function (text) {
return $sce.trustAsHtml(text);
};
}]);
html code:
<p ng-bind-html="currentWork.description | to_trusted"></p>
