Ng-bind-html не работает для тегов ввода

Я пытаюсь сохранить HTML внутри переменной области видимости, а затем использовать его в виде шаблона. Когда я читал, как это сделать в angular, я наткнулся на ng-bind-html. В этом я заметил, что когда я связываю теги html с <a>, <strong> и т.д., Он работает. Но я не могу добавить теги <input> к нему.

Значение, это работает:

$scope.myHtml = '<strong>This is <a hreaf="#">Something</a></strong>';

Шаблон:

<p ng-bind-html="myHtml"> </p>

Но это не работает:

$scope.myHtml = '<input type="text" />';

Шаблон:

<p ng-bind-html="myHtml"> </p>

Вышеприведенное является просто упрощенным образцом только для демонстрационной цели. Мой вопрос:

1) Не работают ли теги с директивой ng-bind-html?

2) Если нет, как я могу связать html тег ввода, чтобы я мог вставить его в представление?

Ответы

Ответ 1

вы получаете $sce: небезопасная ошибка...

это означает, что вы должны использовать ng-bind-html-unsafe, но более новая версия angularjs больше не включает эту директиву, поэтому вы можете использовать $sce.trustAsHtml(), как это...

$scope.trustedInputHtml = $sce.trustAsHtml('<input type="text" />');

но таким образом вы не можете привязать переменные области к вашему html, поэтому лучший способ - написать директиву, которая может быть заменена на ng-bind-html-unsafe...

здесь работает PLUNKER как для $sce, так и для директивных примеров...

Ответ 2

Я бы сохранил материал, который вы вставляете в свой собственный шаблон, и используйте ng-include (http://docs.angularjs.org/api/ng/directive/ngInclude).

Наличие шаблона angular (template.html) с содержимым:

<strong>This is <a href="#">Something</a></strong>

Вы можете включить его с помощью

<p ng-include="template.html"></p>

Это приводит к тому, что

<p ng-include="template.html"><span class="ng-scope"><strong>This is <a href="#">Something</a></strong></span></p>

Ответ 3

Angular выборочно санирует определенные HTML-теги с помощью ng-bind-html

поэтому, если вам нужны все теги, вы должны использовать ng-bind-html-unsafe вместо

но следите за атаками XSS!

BTW

Намного лучше следовать рекомендациям @Ed Hinchliffe