Угловая: создать форматирующий фильтр без html-экранирования

Я хочу сделать автоматическое форматирование HTML для некоторых строк. Например, я хочу сделать автоматическую подписку для символа с префиксом подчеркивания.
Таким образом, строка типа "U_1 + U_2 = U_3" должна быть отформатирована в U1 + U2 = U3

Это похоже на идеальную работу для фильтра. Я попробовал следующее:

angular.module('myApp.filters', []).
  filter('convert_subscripts', [ function(){
      return function(text){
          return text.replace(/_([\w]+)/, '<sub>$1</sub>', 'g');
      };
   }])

И на мой взгляд:

<p>{{content.text | convert_subscripts }}</p>

Но это ускользает от HTML, поэтому пользователь видит теги "sub" вместо красиво отформатированного индекса.

Как мне реализовать функцию форматирования, чтобы html-теги не экранировались?

(Чтобы быть идеальным, сам контент.текст должен быть экранирован для безопасности, но добавленные теги подписки - нет. Я использую угловой 1.2)

1 ответ

Я думаю, что эта статья должна помочь. Вы можете визуализировать HTML двумя способами

$sce.trustAsHtml('text')

или вы можете создать фильтр для этой цели, как

app.filter('filterName',function($sce){
    return function(text){
             $sce.trustAsHtml(text);
           }
    });

В вашем случае вы должны использовать подход 1

function($sce){
      return function(text){
          return $sce.trustAsHtml(text.replace(/_([\w]+)/, '<sub>$1</sub>', 'g'));
      };
Другие вопросы по тегам