Как разрешить html взамен angular2 pipe?

У меня есть канал, который возвращает html-строку, однако выходные данные строки, по-видимому, экранированы по умолчанию для безопасности. Я уверен, что должна быть опция, позволяющая использовать html, но я не могу найти ее при поиске документов.

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

4 ответа

Используйте привязки к innerHTML или же outerHTML сделать уже сбежал HTML. Например <span [innerHTML]="someString | toHtmlPipe"></span>, Посмотри на этот план:

@Pipe({
  name: 'wrapBold'
})
class WrapBold {
  transform(content) {
    return `<b>${content}</b>`;
  }
}

@Component({
  selector: 'my-app',
  pipes: [WrapBold],
  template: `
    <div>
      Hello <span [outerHTML]="content | wrapBold"></span>
    </div>
  `
})
export class App {
  constructor() {
    this.content = 'Angular2'
  }
}

Я не знаю, возможно ли это с трубкой. (Это, см. Ответ @ alexpods.)

Рассматривали ли вы преобразование вашей трубы в компонент со свойством ввода? То есть, что бы ни кормило вашу трубу, сделайте это входным свойством компонента. Поместите HTML-код, который генерирует канал, в шаблон компонента.

Так что спасибо за ответы.

Использование связывания externalHTML, предложенного @alexpods, сработало. Не нужно было менять мою трубу вообще.

Итак, что я делал раньше:

{{'TEXT' | hn: 'h2.whatever'}} который привел к правильному html, но избежал т.е.

&lt;h2 class="whatever"&gt;TEXT&lt;/h2&gt;

Прекрасно работает как: <span [outerHTML]="'TEXT' | hn:'h2.whatever'"></span>

какие выводы: <h2 class="whatever">TEXT</h2>

Итак, вы хотите взять текст и отобразить его как HTML. Если строка является фактическим HTML, то почему не компонент? Это не функциональность канала для рендеринга HTML. Однако, если вы хотите, например, визуализировать текст с символами новой строки, например значение JSON с отступом, используйте предварительно HTML-элемент:

{{obj | myPipe}}

Я буду приветствовать ответ innerHtml, однако, как фактический ответ на вопрос.

Другие вопросы по тегам