Элементы атрибутов ng-bind-html
Я пытаюсь интерполировать строку, содержащую некоторую разметку в шаблоне.
В контроллере:
$scope.message = "Hello moto <a ui-sref='home.test'>click</a>";
Шаблон:
<div ng-bind-html="message.text"></div>
который отображается как:
<div ng-bind-html="message.text" <div="" class="ng-binding">Hello moto <a>click</a></div>
Попытка использовать следующий фильтр также не помогает; текст пропущен для любого из комментариев:
angular.module('test-filters', ['ngSanitize'])
.filter('safe', function($sce) {
return function(val) {
return $sce.trustAsHtml(val);
//return $sce.trustAsUrl(val);
//return $sce.trustAsResourceUrl(val);
};
});
Как я могу интерполировать мою строку, не избегая ее, и не снимая атрибуты?
Изменить: Plunker http://plnkr.co/edit/H4O16KgS0mWtpGRvW1Es?p=preview (обновлено версией sylwester, которая ссылается на ngSanitize
Ответы
Ответ 1
Давайте посмотрим здесь http://jsbin.com/faxopipe/1/edit, который теперь сортируется.
Это не сработало, потому что в теге "ui-sref" была другая директива,
поэтому вам нужно использовать службу $sce.
в вашем js, пожалуйста, добавьте метод:
$scope.to_trusted = function(html_code) {
return $sce.trustAsHtml(html_code);
и в поле зрения:
<p ng-bind-html="to_trusted(message)"></p>
Ответ 2
В сценарии, где вы используете путь ui.router, вам нужно использовать $compile в комбинации с $sce для динамического html, чтобы ui- sref работают правильно. Если вы этого не сделаете, вы увидите ссылку, которая на самом деле не работает.
e.g <span> Hello moto <a ui-sref='home.test'> Link </a> </span>
//You must need to add boundary conditions, this is just for demonstration
$scope.to_trusted = function(someHTML) {
var compiledVal = $compile(someHTML)($scope);
var compiledHTML = compiledVal[0].outerHTML;
return $sce.trustAsHtml(compiledHTML);
}
И вы используете вот так:
<p ng-bind-html="to_trusted(message)"></p>
Обратите внимание, что ваше сообщение должно быть допустимым HTML, начиная с "<"
, поэтому, если вы передаете компиляцию без HTML в $, вы получите ошибку jqlite. Я использовал <span>
для обработки вашего дела.
Ответ 3
Вы пропустили ссылку на angular -sanitize.js, и вы также добавили ее к angular.app
var app = angular.module('plunker', ['ngSanitize']);
Самый простой вариант для привязки html - ng-bind-html:
<li>link ng-html-bind <div ng-bind-html="message"></div></li>
см. Plunkr