AngularJS ngSanitize和SCE

时间:2014-10-28 17:22:13

标签: angularjs ngsanitize

我正在努力了解$ sce和ngSanitize是如何工作的,所以我可以正确使用它,请提出几个问题,以便澄清。我无法从文档中获得足够的细节。

首先,我理解$ sce为输入提供了一个自动启用的转义服务?

  1. 那个男人我不需要明确使用$ sce吗?控制器中的$ scope变量是否自动转义。或者我是否需要明确调用$ sce.trustAs / ParseAs?

  2. 这是否适用于指令?

  3. 示例是以下指令safe:

    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是否自动涵盖指令?

    3. 如果没有,则以下代码更安全:

      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));
                      };
                  }
      

1 个答案:

答案 0 :(得分:0)

至于指令,你可能会研究" ng-bind-html"工作原理:

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

所以我认为$ sce仍然必须在你的自定义指令中明确使用。