условно доверяй html из угловой области видимости

0

У меня есть html-фрагмент следующим образом:

<span id="notification"> {{ message }} </span>

Чтобы связать с html, мне нужно сделать следующее:

<span id="notification" ng-bind-html="message"></span>

В идеале, я хочу иметь возможность установить флаг, чтобы доверять $ scope.message как html... Поэтому мои параметры - использовать ng-if с дублирующимся кодом, но это не идеально, потому что я хотел бы, чтобы это было с одним и тем же идентификатором для обоих элементов сообщения. Я также изучал возможность использования ng-attr, но не верю, что это сработает.

Есть ли способ, которым я могу условно добавить "ng-bind-html" и "ng-bind", поэтому оценить флаг и удалить нежелательный атрибут? Я новичок в angularjs.

  • 0
    если message не содержит HTML, оно все равно будет отображаться правильно, используя ng-bind-html ; не должно быть причины для условного переключения назад и вперед, если только вы не обеспокоены тем, что в message есть HTML, которому вы не хотите доверять, но это будет совершенно отдельной проблемой.
  • 0
    Моя главная проблема заключается в том, что где-то в приложении может быть шанс, что мы напрямую отображаем контент, предоставленный пользователем (да, это большая проблема, но я не хочу делать ее хуже). Если пользователь называет что-то "<script> doBadStuff () </ script>", я не хочу, чтобы это отображалось.
Показать ещё 1 комментарий

1 ответ

0

Вы можете использовать услугу $ sanitize и функцию, чтобы либо вернуть только ваше сообщение, либо вернуть ваше сообщение, завернутое в $sanitize. Тогда вы можете просто использовать ng-bind

Пример

<span id="notification" ng-bind="notificationCtrl.getMessage(message, true)"></span>

В вашем контроллере

this.getMessage = function(msg, sanitize) {
   if (sanitize) return $sanitize(msg)
   return msg
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню