AngularJS ngSanitize и SCE

Я пытаюсь понять, как работают $ sce и ngSanitize, чтобы я мог правильно их использовать. Пожалуйста, ознакомьтесь с несколькими вопросами, которые у меня есть для пояснений. Я не мог получить достаточно деталей из документации.

Прежде всего, как я понимаю, $ sce предоставляет экранирующий сервис для входов, который включается автоматически?

  1. Так что, этот человек мне не нужно явно использовать $ sce? Переменные $ scope в контроллерах автоматически экранируются. Или мне нужно явно вызвать $sce.trustAs/ParseAs?

  2. Это относится к Директивам?

Примером является следующая директива 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 автоматически покрывает директивы?

Если нет, то следующий код безопаснее:

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 ответ

Что касается директив, вы, вероятно, могли бы посмотреть, как работает "ng-bind-html":

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

Поэтому я полагаю, что $sce все еще должен использоваться явно в ваших пользовательских директивах.

Другие вопросы по тегам