Можно ли создать фрагмент HTML в контроллере AngularJS и показать этот HTML в виде?
Это связано с требованием превратить несовместимый BLOB-объект JSON во вложенный список id: value
пар. Поэтому HTML-код создается в контроллере, и теперь я хочу его отобразить.
Я создал свойство модели, но не могу отобразить его в представлении без его простой печати HTML .
Обновить
Похоже, что проблема возникает из-за углового рендеринга созданного HTML-кода в виде строки в кавычках. Постараюсь найти способ обойти это.
Пример контроллера:
var SomeController = function () {
this.customHtml = '<ul><li>render me please</li></ul>';
}
Пример вида:
<div ng:bind="customHtml"></div>
Дает:
<div>
"<ul><li>render me please</li></ul>"
</div>
function htmlSanitizer(html) {...
. Angular Dev's решила, что вы должны быть в состоянии найти любую привязку html, медленно просматривая все свои страницы скрытые элементы один за другим, чтобы найти этот ОДИН ОДИН РАЗ недостающий фрагмент html. !!! очень зол на такое предположение !!!Ответы:
Для Angular 1.x используйте
ng-bind-html
в HTML:В этот момент вы получите сообщение
attempting to use an unsafe value in a safe context
об ошибке, поэтому вам нужно либо использовать ngSanitize, либо $ sce, чтобы решить эту проблему.$ SCE
Используйте
$sce.trustAsHtml()
в контроллере для преобразования строки HTML.ngSanitize
Есть 2 шага:
включите ресурс angular-sanitize.min.js, то есть:
<script src="lib/angular/angular-sanitize.min.js"></script>
В файл js (контроллер или обычно app.js) включите ngSanitize, то есть:
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngSanitize'])
источник
ng-bind-html-unsafe
был удален и две директивы были объединены. Смотрите: github.com/angular/angular.js/blob/master/…$sce
. Вставьте его в контроллер и пропустите HTML через него.$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml(someHtmlVar);
В противном случае я продолжал получатьattempting to use an unsafe value in a safe context
Вы также можете создать фильтр следующим образом:
Тогда в представлении
Примечание . Этот фильтр доверяет всем переданным ему html и может представлять уязвимость XSS, если ему передаются переменные с пользовательским вводом.
источник
ngResource
зависимость не обязательна.sanitize
? Это так вводит в заблуждение, что фактически ничего не дезинфицирует. Вместо этого его следует назватьtrust
,trustSafe
или что - то подобное.rawHtml
мое имя для фильтра вместоsanitize
.Angular JS показывает HTML внутри тега
Решение, предоставленное в приведенной выше ссылке, работало для меня, ни один из вариантов в этой теме не работал. Для тех, кто ищет то же самое с AngularJS версии 1.2.9
Вот копия:
РЕДАКТИРОВАТЬ:
Вот установка:
JS файл:
HTML-файл:
источник
К счастью, вам не нужны никакие причудливые фильтры или небезопасные методы, чтобы избежать этого сообщения об ошибке. Это полная реализация для правильного и безопасного вывода HTML-разметки в представлении.
Модуль sanitize должен быть включен после Angular:
Затем модуль должен быть загружен:
Это позволит вам включить разметку в строку из контроллера, директивы и т.д .:
Наконец, в шаблоне он должен быть выведен так:
Который даст ожидаемый результат: 42 является ответом .
источник
<div><label>Why My Input Element Missing</label><input /></div>
... Если вас это удивит, обновите ваш ответ, плз .. Потому что я протестировал все решения с 10 голосами ... Ваше решение не помогло мне увидеть мои входные теги ... отлично, в противном случае ... Я использовал$sce.trustAsHtml(html)
Я попробовал сегодня, единственный способ, которым я нашел это
<div ng-bind-html-unsafe="expression"></div>
источник
ng-bind-html-unsafe
больше не работает.Это самый короткий путь:
Создать фильтр:
И по вашему мнению:
PS Этот метод не требует включения
ngSanitize
модуля.источник
$sce
в принятом ответе, не сработало для меня, и я не хотел включать дополнительную зависимость для чего-то такого тривиального.на HTML
ИЛИ
на контроллере
работает также с
$scope.comment.msg = $sce.trustAsHtml(html);
источник
$sce
аккуратно, но не мог ли пользователь просто добавить точку останова и восстановить вредоносный код сthis.myCtrl.comment.msg
помощью отладчика?ng-bind-html
удаляется.Я обнаружил, что использование ng-sanitize не позволило мне добавить ng-click в html.
Чтобы решить эту проблему, я добавил директиву. Нравится:
И это HTML:
Удачи.
источник
Просто сделал это, используя ngBindHtml, следуя угловым (v1.4) документам ,
Убедитесь, что вы включили ngSanitize в зависимости модуля. Тогда все должно работать нормально.
источник
Другое решение, очень похожее на blrbr, за исключением использования атрибута scoped:
А потом
Обратите внимание, что вы можете заменить
element.append()
наelement.replaceWith()
источник
есть еще одно решение этой проблемы, использующее создание нового атрибута или директив в angular.
продукт-specs.html
app.js
index.html
или
или
https://docs.angularjs.org/guide/directive
источник
Вы также можете использовать ng-include .
Вы можете использовать «ng-show», чтобы скрыть данные этого шаблона.
источник
вот решение сделать фильтр как этот
и применить это как фильтр к ng-bind-html, как
и спасибо Рубену Декропу
источник
использование
а также
Для этого вам нужно включить
angular-sanitize.js
, например, в ваш html-файлисточник
Вот простая (и небезопасная)
bind-as-html
директива без необходимостиngSanitize
:Обратите внимание, что это откроет проблемы безопасности, если привязка ненадежного контента.
Используйте так:
источник
Рабочий пример с конвейером для отображения html в шаблоне с Angular 4.
1.Crated Труба escape-html.pipe.ts
`
`2. Зарегистрируйте канал на app.module.ts
Используйте в своем шаблоне
getDivHtml() { //can return html as per requirement}
Пожалуйста, добавьте соответствующую реализацию для getDivHtml в связанный файл component.ts.
источник
Просто простое использование
[innerHTML]
, как показано ниже:Прежде чем вам нужно было использовать
ng-bind-html
...источник
В Angular 7 + ionic 4 содержимое Html может быть показано с помощью «[innerHTML]»:
Я надеюсь, это также поможет вам. Спасибо.
источник