最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解AngularJs中$sce與$sceDelegate上下文轉(zhuǎn)義服務(wù)

 更新時(shí)間:2016年09月21日 08:45:49   投稿:daisy  
這篇文章給大家詳細(xì)介紹了AngularJs提供的嚴(yán)格上下文轉(zhuǎn)義服務(wù)$sce與$sceDelegate,文中介紹的很詳細(xì),有需要的朋友們可以參考借鑒。

一、嚴(yán)格的上下文轉(zhuǎn)義服務(wù)

嚴(yán)格的上下文轉(zhuǎn)義(SCE)是一種需要在一定的語(yǔ)境中導(dǎo)致AngularJS綁定值被標(biāo)記為安全使用語(yǔ)境的模式。由用戶通過(guò)ng-bind-html綁定任意HTML語(yǔ)句就是這方面的一個(gè)例子。我們稱這些上下文轉(zhuǎn)義為特權(quán)或者SCE。

二、$sce

$sce 服務(wù)是AngularJs提供的一種嚴(yán)格上下文轉(zhuǎn)義服務(wù)。

下面代碼是簡(jiǎn)化了的ngBindHtml實(shí)現(xiàn)(當(dāng)然,這不是完整版ngBindHtml源碼):

 var ngBindHtmlDirective = ['$sce', function($sce) {
 return function(scope, element, attr) {
 scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
  element.html(value || '');
 });
 };
 }];

支持哪些信任的上下文類型?

$sce.HTML  將HTML代碼安全的綁定到應(yīng)用程序中。

$sce.CSS  將CSS樣式代碼安全的綁定到應(yīng)用程序中。

$sce.URL  將URL安全的綁定到應(yīng)用程序中并保證其可用。比如(href,src)

$sce.RESOURCE_URL   將RESOURCE_URL安全的綁定到應(yīng)用程序中并保證其可用。比如(ng-href,ng-src)

$sce.JS  將JAVASCRIPT代碼安全的綁定到應(yīng)用程序中。

如何使$sce服務(wù)可用或者不可用?

 angular.module(“myApp”,[]).config([“$sceProvider”,function($sceProvider){
 $sceProvider.enabled(true/false);
 }]);

使用:$sce();

方法:

isEnabled();

返回一個(gè)boolean,指示是否可啟用SCE。

parseAs(type,expression);

將Angular表達(dá)式轉(zhuǎn)換為一個(gè)函數(shù)。這類似$parse解析并且當(dāng)表達(dá)式是常量時(shí)是相同的。否則,它將調(diào)用$sce.getTrusted(type,result)將表達(dá)式包裝。

type:在SCE的上下文的使用的結(jié)果的類型。

expression:被編譯的字符串表達(dá)式。

trustAs(type,value);

代表$sceDelegate.trustAs。

type:上下文中能安全的被使用的值,如url,resourceUrl,html,js和css。

value:需要被認(rèn)為是安全或者值的信賴的值。

trustAsHtml(value);

$sceDelegate.trustAs($sce.HTML,value)的快捷方式。

value:被信任的值。

trustAsUrl(value);

$sceDelegate.trustAs($sce.URL,value)的快捷方式。

value:被信任的值。

trustAsResourceUrl(value);

$sceDelegate.trustAs($sce.RESOURCE_URL,value)的快捷方式。

value:被信任的值。

trustAsJs(value);

$sceDelegate.trustAs($sce.JS,value)的快捷方式。

value:被信任的值。

getTrusted(type,maybeTrusted);

代表$sceDelegate.getTrusted。因此,得到了$sce的結(jié)果。如果查詢的上下文類型是一個(gè)創(chuàng)造型的類型,則調(diào)用trustAs()并且返回原來(lái)提供的值。如果這個(gè)條件不滿足,則拋出一個(gè)異常。

getTrustedHtml(value);

$sceDelegate.getTrusted ($sce.HTML,value)的快捷方式。

value:通過(guò)$sce.getTrusted執(zhí)行后的值。

getTrustedCss(value);

$sceDelegate.getTrusted ($sce.CSS,value)的快捷方式。

value:通過(guò)$sce.getTrusted執(zhí)行后的值。

getTrustedUrl(value);

$sceDelegate.getTrusted ($sce.URL,value)的快捷方式。

value:通過(guò)$sce.getTrusted執(zhí)行后的值。

getTrustedResourceUrl(value);

$sceDelegate.getTrusted ($sce.RESOURCE_URL,value)的快捷方式。

value:通過(guò)$sce.getTrusted執(zhí)行后的值。

getTrustedJs(value);

$sceDelegate.getTrusted ($sce.JS,value)的快捷方式。

value:通過(guò)$sce.getTrusted執(zhí)行后的值。

parseAsHtml(expression);

$sce.parseAs ($sce.HTML,value)的快捷方式。

value:被編譯的字符串表達(dá)式。

parseAsCss(expression);

$sce.parseAs ($sce.CSS,value)的快捷方式。

value:被編譯的字符串表達(dá)式。

parseAsUrl(expression);

$sce.parseAs ($sce.URL,value)的快捷方式。

value:被編譯的字符串表達(dá)式。

parseAsResourceUrl(expression);

$sce.parseAs ($sce.RESOURCE_URL,value)的快捷方式。

value:被編譯的字符串表達(dá)式。

parseAsJs(expression);

$sce.parseAs ($sce.JS,value)的快捷方式。

value:被編譯的字符串表達(dá)式。

使用方式:

 <div ng-app="Demo" ng-controller="testCtrl as ctrl">
 <textarea ng-model="ctrl.jsContext"></textarea>
 <pre ng-bind="ctrl.jsBody"></pre>
 <button ng-click="ctrl.runJs()">Run</button>
 <div ng-bind-html="ctrl.htmlText" class="myCss"></div>
 </div>
 (function () {
 angular.module('Demo', [])
 .controller('testCtrl', ["$sce","$scope",testCtrl]);
 function testCtrl($sce,$scope) {
  var vm = this;
  $scope.$watch("ctrl.jsContext",function(n){
  vm.jsBody = n;
  });
  this.runJs = function() {
  eval(vm.jsBody.toString());
  };
  vm.htmlText = "<h2>Hello World</h2>";
  vm.htmlText =$sce.trustAsHtml(this.htmlText);
 }
 }());

放在filter使用:

 <div ng-app="Demo" ng-controller="testCtrl as ctrl">
 <div ng-bind-html="ctrl.htmlText | trust:'html'"></div>
 </div>
 (function () {
 angular.module('Demo', [])
 .filter("trust",["$sce",trust])
 .controller('testCtrl', testCtrl);
 function trust($sce){
  return function(value,type){
  return $sce.trustAs(type,value); 
  }
 };
 function testCtrl() {
  this.htmlText = "<h2>Hello World</h2>";
 }
 }());

上面是一個(gè)將不被Angular認(rèn)定為信任的HTML代碼字符串通過(guò)$sce設(shè)置為信任的HTML代碼并且插入的例子,這里用了個(gè)小技巧,也就沒(méi)在controller進(jìn)行這步操作了,直接放到一個(gè)filter服務(wù)內(nèi),只要在需要的地方過(guò)濾下即可,并且可指定類型,這里寫(xiě)成統(tǒng)一動(dòng)態(tài)選擇類型了。那么在啥時(shí)候需要用到這兩個(gè)服務(wù)呢?在當(dāng)使用ng-bind-html綁定html時(shí)報(bào)錯(cuò):Error: [$sce:unsafe]Attempting to use an unsafe value in a safe context. 的時(shí)候使用。

三、$sceDelegate

$sceDelegate是一個(gè)AngularJs為$sce服務(wù)提供嚴(yán)格的上下文轉(zhuǎn)義服務(wù)的服務(wù)。

通常,你會(huì)配置或者重寫(xiě)$sceDelegate去代替$sce服務(wù)以定制AngularJs中的嚴(yán)格的上下文轉(zhuǎn)義機(jī)制。當(dāng)$sce提供眾多的快捷方式,你其實(shí)只需要重寫(xiě)三個(gè)核心功能(trustAs,getTrusted和valueOf)來(lái)替代事件的工作方式,因?yàn)?sce代表了$sceDelegate的這些操作。

當(dāng)你完成了重寫(xiě)或配置$sceDelegate用來(lái)改變$sce的行為時(shí),一般情況下,需要配置$sceDelegateProvider以代替你用于裝載可信任的AngularJs資源(如template)的白名單和黑名單。

使用:$sceDelegate();

方法:

trustAs(type,value);

返回一個(gè)在angular中作為指定的使用嚴(yán)格的上下文轉(zhuǎn)義服務(wù)上下文中的值的對(duì)象使用。

type:上下文中能安全的被使用的值,如url,resourceUrl,html,js和css。

value:需要被認(rèn)為是安全或者值的信賴的值。

valueOf(value);

如果傳遞的參數(shù)被上一個(gè)$sceDelegate.trustAs調(diào)用返回,返回已通過(guò)$sceDelegate.trustAs的值。否則返回原先的值。

value:上一個(gè)$sceDelegate.trustAs調(diào)用的結(jié)果或者其他任何結(jié)果。

getTrusted(type,maybeTrusted);

如果查詢的上下文類型是一個(gè)創(chuàng)造型的類型,得到$sceDelegate調(diào)用的結(jié)果并返回最初提供的值。如果這個(gè)條件不滿意,拋出一個(gè)異常。

type:需要用到的值的類型。

value:上一個(gè)$sceDelegate.trustAs調(diào)用的結(jié)果或者其他任何結(jié)果。

使用代碼(配置白名單/黑名單):

 angular.module('myApp', []).config([“$ sceDelegateProvider”,function($sceDelegateProvider) {
 $sceDelegateProvider.resourceUrlWhitelist([“whitelist value”]);
 $sceDelegateProvider.resourceUrlBlacklist([“blacklist value”]);
 }]);

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容,希望能對(duì)大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • 使用angularjs創(chuàng)建簡(jiǎn)單表格

    使用angularjs創(chuàng)建簡(jiǎn)單表格

    AngularJS提供豐富填寫(xiě)表單和驗(yàn)證。我們可以用ng-click來(lái)處理AngularJS點(diǎn)擊按鈕事件,然后使用 $dirty 和 $invalid標(biāo)志做驗(yàn)證的方式。使用novalidate表單聲明禁止任何瀏覽器特定的驗(yàn)證。下面我們來(lái)看看如何使用angularjs創(chuàng)建簡(jiǎn)單表格
    2016-01-01
  • AnjularJS中$scope和$rootScope的區(qū)別小結(jié)

    AnjularJS中$scope和$rootScope的區(qū)別小結(jié)

    這篇文章給大家整理了關(guān)于AnjularJS中$scope和$rootScope的區(qū)別,文中運(yùn)用實(shí)例代碼介紹的很詳細(xì),有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的方法詳解

    AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的方法詳解

    這篇文章主要介紹了AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的原理、實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • Angular 4.x 路由快速入門(mén)學(xué)習(xí)

    Angular 4.x 路由快速入門(mén)學(xué)習(xí)

    這篇文章主要介紹了Angular 4.x 路由快速入門(mén)學(xué)習(xí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Angular2內(nèi)置指令NgFor和NgIf詳解

    Angular2內(nèi)置指令NgFor和NgIf詳解

    Directive的概念在Angular 1.x就存在了,我對(duì)它的認(rèn)識(shí)比較模糊,所以直接通過(guò)一些例子來(lái)說(shuō)明。Angular提供的內(nèi)置執(zhí)行有很多,這次使用兩個(gè):ngFor、ngIf。
    2016-08-08
  • @angular前端項(xiàng)目代碼優(yōu)化之構(gòu)建Api Tree的方法

    @angular前端項(xiàng)目代碼優(yōu)化之構(gòu)建Api Tree的方法

    這篇文章主要介紹了@angular前端項(xiàng)目代碼優(yōu)化之構(gòu)建Api Tree的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼

    AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼

    這篇文章主要介紹了AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼,需要的朋友可以參考下
    2018-02-02
  • AngularJS獲取json數(shù)據(jù)的方法詳解

    AngularJS獲取json數(shù)據(jù)的方法詳解

    這篇文章主要介紹了AngularJS獲取json數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了AngularJS獲取json數(shù)據(jù)的詳細(xì)步驟、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-05-05
  • angularJS的radio實(shí)現(xiàn)單項(xiàng)二選一的使用方法

    angularJS的radio實(shí)現(xiàn)單項(xiàng)二選一的使用方法

    下面小編就為大家分享一篇angularJS的radio實(shí)現(xiàn)單項(xiàng)二選一的使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • AngularJS基礎(chǔ) ng-model-options 指令簡(jiǎn)單示例

    AngularJS基礎(chǔ) ng-model-options 指令簡(jiǎn)單示例

    本文主要介紹AngularJS ng-model-options 指令,這里對(duì)ng-model-options指令的基本資料進(jìn)行整理,有需要的小伙伴可以參考下
    2016-08-08

最新評(píng)論

凌源市| 开江县| 鄂托克旗| 恩平市| 汝城县| 庆元县| 福州市| 海淀区| 德格县| 长兴县| 宽甸| 丰宁| 江陵县| 台安县| 芦山县| 靖宇县| 会同县| 山东| 桃源县| 巴林左旗| 凭祥市| 新河县| 汝南县| 西和县| 临海市| 江北区| 观塘区| 永嘉县| 安阳县| 平果县| 呈贡县| 葵青区| 长子县| 临海市| 韶山市| 冷水江市| 丁青县| 页游| 连南| 磴口县| 上犹县|