angular中的ng-bind-html指令和$sce服務(wù)

轉(zhuǎn)載自: angular中的ng-bind-html指令和$sce服務(wù)

angular js的強(qiáng)大之處之一就是他的數(shù)據(jù)雙向綁定這一牛B功能,我們會(huì)常常用到的兩個(gè)東西就是ng-bind和針對(duì)form的ng-model。但在我們的項(xiàng)目當(dāng)中會(huì)遇到這樣的情況,后臺(tái)返回的數(shù)據(jù)中帶有各種各樣的html標(biāo)簽。如:

$scope.currentWork.description = “hello,<br><b>今天我們?nèi)ツ睦铮?lt;/b>”

我們用ng-bind-html這樣的指令來綁定,結(jié)果卻不是我們想要的。是這樣的

hello,
今天我們?nèi)ツ睦铮?br> 怎么辦呢?

對(duì)于angular 1.2一下的版本我們必須要使用$sce這個(gè)服務(wù)來解決我們的問題。所謂sce即“Strict Contextual Escaping”的縮寫。翻譯成中文就是“嚴(yán)格的上下文模式”也可以理解為安全綁定吧。來看看怎么用吧。

controller code:

$http.get('/api/work/get?workId=' + $routeParams.workId).success(function (work) {$scope.currentWork = work;});

HTML code:

<p> {{currentWork.description}}</p>

我們返回的內(nèi)容中包含一系列的html標(biāo)記。表現(xiàn)出來的結(jié)果就如我們文章開頭所說的那樣。這時(shí)候我們必須告訴它安全綁定。它可以通過使用$ sce.trustAsHtml()。該方法將值轉(zhuǎn)換為特權(quán)所接受并能安全地使用“ng-bind-html”。所以,我們必須在我們的控制器中引入$sce服務(wù)

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>

這樣結(jié)果就完美的呈現(xiàn)在頁面上了:

hello

今天我們?nèi)ツ睦铮?/p>

咱們還可以這樣用,把它封裝成一個(gè)過濾器就可以在模板上隨時(shí)調(diào)用了

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>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容