深入理解AngularJS中的ng-bind-html指令和$sce服務(wù)
前言
Angularjs的強(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這樣的指令來(lái)綁定,結(jié)果卻不是我們想要的。
是這樣的
hello, 今天我們?nèi)ツ睦铮?/pre>
怎么辦呢?
對(duì)于angular 1.2一下的版本我們必須要使用$sce這個(gè)服務(wù)來(lái)解決我們的問(wèn)題。所謂sce即“Strict Contextual Escaping”的縮寫(xiě)。翻譯成中文就是“嚴(yán)格的上下文模式”也可以理解為安全綁定吧。
來(lái)看看怎么用吧。
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)出來(lái)的結(jié)果就如我們文章開(kāi)頭所說(shuō)的那樣。這時(shí)候我們必須告訴它安全綁定。它可以通過(guò)使用$ 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)在頁(yè)面上了:
hello 今天我們?nèi)ツ睦铮?/pre>
咱們還可以這樣用,把它封裝成一個(gè)過(guò)濾器就可以在模板上隨時(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>
總結(jié)
以上就是關(guān)于AngularJS中的ng-bind-html指令和$sce服務(wù)的全部?jī)?nèi)容了,希望對(duì)大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助,如果有問(wèn)題可以留言交流。
相關(guān)文章
使用AngularJS創(chuàng)建自定義的過(guò)濾器的方法
這篇文章主要介紹了使用AngularJS創(chuàng)建自定義的過(guò)濾器的方法,AngularJS是非常熱門(mén)的JavaScript庫(kù),需要的朋友可以參考下2015-06-06Angular實(shí)現(xiàn)的簡(jiǎn)單定時(shí)器功能示例
這篇文章主要介紹了Angular實(shí)現(xiàn)的簡(jiǎn)單定時(shí)器功能,結(jié)合實(shí)例形式分析了AngularJS定時(shí)器功能的簡(jiǎn)單實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-12-12Angular8升級(jí)至Angular13遇到的問(wèn)題解決
這幾天升級(jí)公司的一個(gè)Angular項(xiàng)目遇到了一些問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Angular8升級(jí)至Angular13遇到的問(wèn)題解決,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01AngualrJS中每次$http請(qǐng)求時(shí)的一個(gè)遮罩層Directive
AngularJS是一款非常強(qiáng)大的前端MVC框架。接下來(lái)通過(guò)本文給大家介紹AngualrJS中每次$http請(qǐng)求時(shí)的一個(gè)遮罩層Directive,本文非常具有參考借鑒價(jià)值,特此分享供大家學(xué)習(xí)2016-01-01Angular 實(shí)現(xiàn)輸入框中顯示文章標(biāo)簽的實(shí)例代碼
這篇文章主要介紹了Angular 實(shí)現(xiàn)輸入框中顯示文章標(biāo)簽的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11使用angularjs.foreach時(shí)return的問(wèn)題解決
這篇文章主要介紹了使用angularjs.foreach時(shí)return的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Angular應(yīng)用打包和部署實(shí)現(xiàn)過(guò)程詳解
這篇文章主要為大家介紹了Angular應(yīng)用打包和部署實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08