2014-10-28 25 views
2

我想了解$ sce和ngSanitize是如何工作的,所以我可以正確地使用它,請帶上一些我已經澄清的問題。我無法從文檔中獲得足夠的細節。AngularJS ngSanitize和SCE

首先,我瞭解$ sce爲自動啓用的輸入提供了轉義服務?

  1. 那麼這個人我不需要明確地使用$ sce?控制器中的$ scope變量會自動轉義。或者我需要顯式調用$ sce.trustAs/ParseAs?

  2. 這是否適用於指令?

例子如下指令安全:

link: function(scope, elm, attrs, ctrl) { 
       // view -> model 
       elm.on('blur keyup change', function() { 
        scope.$apply(function() { 
         ctrl.$setViewValue(elm.html()); 
        }); 
       }); 

       // model -> view 
       ctrl.$render = function() { 
        elm.html(ctrl.$viewValue); 
       }; 
      } 

至於ngSanitize,這似乎是一個模塊,可以自動配置$ SCE合理的默認值,所以也許也許ngSanitize模塊我不需要明確使用$ sce服務?

  1. 我還注意到有一個ngModule的$ santize服務,它是如何形成$ sce的?

  2. ngSanitize會自動覆蓋指令嗎?

如果沒有,那麼就是下面的代碼更加安全:

link: function(scope, elm, attrs, ctrl) { 
       // view -> model 
       elm.on('blur keyup change', function() { 
        scope.$apply(function() { 
         ctrl.$setViewValue(elm.html()); 
        }); 
       }); 

       // model -> view using sanitize 
       ctrl.$render = function() { 
        elm.html($sanitize(ctrl.$viewValue)); 
       }; 
      } 

回答

0

至於指令,你也許可以考慮如何 「NG綁定 - HTML」 的工作原理:

var parsed = $parse(attr.ngBindHtml); 
element.html($sce.getTrustedHtml(parsed(scope)) || ''); 

所以我認爲$ sce仍然必須在你的自定義指令中明確使用。

相關問題