1

Проблема я столкнулся в Я получаю данные от сервера, имеющего содержание HTMLнг-связывать-HTML, чтобы предотвратить выполнение сценариев в содержимом

<p> hello <a class='mention'data-id='1'>Amerr</a></p>

С нг-связывать-HTMLSantaize, и он удалит все потенциальные угрозы, а также атрибуты, такие как data-id = '1'. Что мне нужно для моих указаний. Поэтому я использую

  1. $ компилировать для моей директивы действовать на якорь тега.
  2. $ sce.trustAsHtml, чтобы вернуть код.

так что если есть какой-либо текст, как

"<p> {{axy}} /p>\n" 

$compile(html_code)($scope)

Это будет выполнять код и вызывает угловое выполнить выражение вызывает проблемы. Помогите мне решить эту проблему.

var controller= app.controller('Homecontrol', function($scope) { 
 

 
    $scope.body = socket.emit('hello'); 
 
    $scope.to_trusted = function(html_code) { 
 
    if (/<[a-z][\s\S]*>/i.test(html_code)) { 
 
     var a = $compile(html_code)($scope); 
 
     return $sce.trustAsHtml(a[0].innerHTML); 
 
    } else { 
 
     return html_code; 
 
    } 
 
    } 
 

 
}); 
 

 
app.directive('mention', function(){ 
 
    return { 
 
    restrict: 'AEC', 
 
    transclude: true, 
 
    template: '<a ng-transclude ></a>', 
 
    replace: true, 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script> 
 
<p ng-bind-html=toTrust(body) ></p>

+0

У вас есть контроль над данными, которые поступают с сервера? –

+0

Я не понял. Нужно ли компилировать или сохранять только атрибуты data- *? –

+0

Мне нужно скомпилировать текст, чтобы директива Angular действовала на строку, содержащую тег Link. но если строка содержит «{{}}« угловое выражение. компилятор пытается выполнить это выражение., которое вызывает problen @MarcusHenrique – Amerrnath

ответ

0

я, наконец, сделал путем разбора строки по. Jquery.parseHTML и скомпилировал требуемую DOM, с которой необходимо компилировать $ для директивы, чтобы действовать на нее. и заменяется DOM.

 Смежные вопросы

  • Нет связанных вопросов^_^