AngularJS NGS消毒和SCE

AngularJS NGS消毒和SCE,angularjs,ngsanitize,Angularjs,Ngsanitize,我试图了解$sce和ngSanitize是如何工作的,以便我能够正确地使用它,请回答一些问题,以便澄清。我无法从文档中获得足够的详细信息 首先,据我所知,$sce为自动启用的输入提供转义服务 那个我不需要显式使用$sce的人?控制器中的$scope变量是否自动转义。或者我需要显式调用$sce.trustAs/ParseAs吗 这是否适用于指令 示例如下所示: link: function(scope, elm, attrs, ctrl) { // view -&g

我试图了解$sce和ngSanitize是如何工作的,以便我能够正确地使用它,请回答一些问题,以便澄清。我无法从文档中获得足够的详细信息

首先,据我所知,$sce为自动启用的输入提供转义服务

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

  • 这是否适用于指令

  • 示例如下所示:

    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服务

  • 我还注意到ngModule提供了$santize服务,这与$sce有什么不同

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

    至于指令,您可能需要了解“ng bind html”是如何工作的:

    因此,我认为$sce仍然必须在自定义指令中显式使用

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