ng-bind-html / $sce en Angular moderno
ng-bind-html pasa a ser un binding a [innerHTML], que sanitiza el contenido por defecto. $sce pasa a ser DomSanitizer, que se usa solo cuando necesitas saltarte esa sanitización.
Antes · AngularJS
// controller
vm.body = $sce.trustAsHtml(article.bodyHtml);
vm.videoUrl = $sce.trustAsResourceUrl(article.videoUrl);
<!-- template -->
<div ng-bind-html="vm.body"></div>
<iframe ng-src="{{ vm.videoUrl }}"></iframe>Después · Angularprivate sanitizer = inject(DomSanitizer);
article = input.required<Article>();
videoUrl = computed(() =>
this.sanitizer.bypassSecurityTrustResourceUrl(this.article().videoUrl));
<!-- template -->
<div [innerHTML]="article().bodyHtml"></div>
<iframe [src]="videoUrl()"></iframe>Qué cambia
- [innerHTML] elimina scripts y atributos de eventos por su cuenta; no hay un módulo ngSanitize que instalar.
- $sce.trustAsHtml pasa a ser bypassSecurityTrustHtml, para contenido que controlas por completo.
- Las URL de iframes y elementos similares necesitan bypassSecurityTrustResourceUrl, igual que antes con trustAsResourceUrl.
Consejo de migración. Lista todas las llamadas a trustAs durante el diagnóstico, porque cada una es una decisión de seguridad que alguien tomó hace años. Muchas llamadas a trustAsHtml se pueden eliminar, ya que la sanitización por defecto alcanza para texto con formato.
Relacionado
¿Planeas una migración o una plataforma de microfrontends?
En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.
Escríbeme por LinkedIn