深入理解AngularJS中的ng-bind-html指令和$sce服務_AngularJS

來源:互聯網
上載者:User

前言

Angularjs的強大之處之一就是他的資料雙向繫結這一牛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>

總結

以上就是關於AngularJS中的ng-bind-html指令和$sce服務的全部內容了,希望對大家的學習或者工作帶來一定的協助,如果有問題可以留言交流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.