Подтвердить что ты не робот

Angular фильтр, который генерирует html

У меня есть небольшой фильтр angular, который вставляет значок (bootstrap) вместо истинного значения. Он работает, но html закодирован:

  var conApp = angular.module('conApp', []);
  conApp.filter('trueIcon', function($filter){
    return function(booleanValue){
        return booleanValue ? '<i class="icon-ok"></i>' : '';
    }
  });

Мне нужно реализовать еще один фильтр для декодирования html? Есть ли способ "angular" сделать это?

4b9b3361

Ответ 1

Вам нужно использовать ng-bind-html для рендеринга html.

<span ng-bind-html="foo | trueIcon"></span>

Это говорит... что действительно не для каких фильтров. Фильтры больше предназначены для очистки данных, которые записываются в представление, а не генерируют элементы самого представления /DOM. Вероятно, вам лучше создать директиву для этого:

app.directive('trueIcon', function() {
   return {
      restrict: 'E',
      template: '<i ng-class="{\'icon-ok\': value, \'icon-not-okay\': !value}"></i>',
      scope: {
         value: '='
      }
   };
});

<true-icon value="foo"></true-icon>

Ответ 2

AngularJS дезинфицирует результаты оценки экспрессии по умолчанию. Чтобы отобразить HTML как разметку, у вас есть 2 варианта:

В то время как вышеупомянутое сделает ваш фильтр работой, возможно, вам стоит подумать о том, чтобы превратить его в директиву?