J'ai un tube qui renvoie une chaîne html, mais les sorties de chaîne ont probablement échappé par défaut pour des raisons de sécurité. Je suis sûr qu'il doit y avoir une option pour autoriser le langage HTML à la place, mais je ne le trouve pas lorsque je recherche des documents.
Comment puis-je dire au tuyau d'autoriser le rendu du code HTML réel?
Utilisez les liaisons vers innerHTML
ou outerHTML
pour rendre le code HTML échappé. Par exemple <span [innerHTML]="someString | toHtmlPipe"></span>
. Voir ce plunk :
@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'
}
}
Je ne sais pas si c'est possible avec un tuyau. (Oui, voir la réponse de @ alexpods.)
Avez-vous envisagé de convertir votre canal en un composant avec une propriété d'entrée? Autrement dit, quel que soit l'alimentation de votre conduite, faites-en une propriété d'entrée du composant. Placez le code HTML généré par le canal dans le modèle du composant.
Alors merci pour les réponses.
L'utilisation de la liaison outerHTML suggérée par @alexpods a fonctionné de manière exceptionnelle… .. Je n'ai pas eu besoin de changer de canal.
Donc ce que je faisais avant:
{{'TEXT' | hn: 'h2.whatever'}}
qui a abouti au code HTML correct mais échappé, par exemple.
<h2 class="whatever">TEXT</h2>
Fonctionne bien comme: <span [outerHTML]="'TEXT' | hn:'h2.whatever'"></span>
quelles sorties: <h2 class="whatever">TEXT</h2>
Donc, vous voulez prendre du texte et l'afficher au format HTML. Si la chaîne est du code HTML réel, pourquoi pas un composant? Ce n'est pas la fonctionnalité d'un tuyau pour rendre HTML. Toutefois, si vous souhaitez, par exemple, rendre du texte avec des nouvelles lignes, comme une valeur JSON avec indentation, utilisez un élément pré-HTML:
{{obj | myPipe}}
Je vais cependant upvoter la réponse innerHtml, comme réponse réelle à la question.