AngularJS ngSanitize и SCE
Я пытаюсь понять, как работают $ sce и ngSanitize, чтобы я мог правильно их использовать. Пожалуйста, ознакомьтесь с несколькими вопросами, которые у меня есть для пояснений. Я не мог получить достаточно деталей из документации.
Прежде всего, как я понимаю, $ sce предоставляет экранирующий сервис для входов, который включается автоматически?
Так что, этот человек мне не нужно явно использовать $ sce? Переменные $ scope в контроллерах автоматически экранируются. Или мне нужно явно вызвать $sce.trustAs/ParseAs?
Это относится к Директивам?
Примером является следующая директива 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?
Я также заметил, что в 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));
};
}
1 ответ
Что касается директив, вы, вероятно, могли бы посмотреть, как работает "ng-bind-html":
var parsed = $parse(attr.ngBindHtml);
element.html($sce.getTrustedHtml(parsed(scope)) || '');
Поэтому я полагаю, что $sce все еще должен использоваться явно в ваших пользовательских директивах.