У меня есть 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.
Вы можете использовать услугу $ 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
}
message
не содержит HTML, оно все равно будет отображаться правильно, используяng-bind-html
; не должно быть причины для условного переключения назад и вперед, если только вы не обеспокоены тем, что вmessage
есть HTML, которому вы не хотите доверять, но это будет совершенно отдельной проблемой.