2014-02-17 1 views
29

Я пытаюсь вставить HTML внутри шаблона, используя атрибут ng-bind-html-unsafe. Но по какой-то причине он не работает.Угловой JS показывает HTML в теге

Мой код:

<tr class="white two-button" ng-repeat="(key,value) in recommendations | ojoScoreFilter:ojoScore | relevancyScoreFilter:relevancyScore | orderBy:predicate:reverse"> 
<td> 
<div ng-bind-html-unsafe="value.button"></div> 
</td> 
</tr> 

Я не в состоянии увидеть HTML. Если изменить ng-bind-html-unsafe="value.button" на ng-bind-html-unsafe="{{value.button}}" то это показывает HTML, но в пределах атрибута, что-то вроде этого:

<div ng-bind-html-unsafe="&lt;a class=&quot;action_hrefs full-width bgcolor10 purple-hover flat-button flat-white-button btn&quot; data-value=&quot;947&quot; href=&quot;#&quot;&gt;&lt;i class=&quot;fa fa-lock&quot;&gt;&lt;/i&gt;&nbsp;Unlock&lt;/a&gt;"></div> 
+0

Попробуйте включить модуль «ngSanitize» в вашем модуле и нг-Bind-HTML в вашем размечать – Whisher

+1

какую версию углового вы используете? 'ng-bind-html-unsafe' был удален в Angular версии 1.2. –

+0

@DavinTryon Я использую 1.2.9 –

ответ

113

Ok Я нашел решение для этого:

JS:

$scope.renderHtml = function(html_code) 
{ 
    return $sce.trustAsHtml(html_code); 
}; 

HTML:

<p ng-bind-html="renderHtml(value.button)"></p> 
+6

Woah это единственное, что сработало! Я пробовал все, спасибо :) – anpatel

+14

Это единственное решение, которое сработало и для меня. Обязательно введите $ sce в свой контроллер. –

+1

Это работает, но кажется немного переборщиком. Мне нужно вводить $ sce в каждый контроллер? И нужно добавить эту функцию 'renderHtml' для каждого контроллера, который нуждается в html? –

11

сделать фильтр следующим образом

.filter('trusted', 
    function($sce) { 
    return function(ss) { 
     return $sce.trustAsHtml(ss) 
    }; 
    } 
) 

и применять это в качестве фильтра к нг-связывать-HTML, как

<div ng-bind-html="code | trusted"> 
+1

Принятый ответ выше получил много голосов, но я думаю, что это решение является лучшим ответом. Выполнение этого способа решит проблему ввода $ sce в каждый контроллер, который отобразит html. Я все еще новичок в этом, так что не стесняйтесь поправлять меня! – Jubskie