Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

141
Visualizações
¿Cómo se crean componentes web con plantillas personalizables utilizando elementos angulares?

Me gustaría crear una biblioteca de componentes web usando elementos angulares que tengan plantillas predeterminadas pero que permitan a los desarrolladores anular la salida.

Por ejemplo, considere un componente de resultados de búsqueda. Podría tener una plantilla predeterminada que se vea así:

 <h1>Search results for: {{query}}</h1>

Pero un desarrollador podría querer cambiar la salida a esto (como un ejemplo arbitrario, debe ser flexible):

 <h1>You searched for <strong>{{query}}</strong></h1>

Mi primer pensamiento fue simplemente usar ng-content como este:

 <search-results> <h1>You searched for <strong>{{query}}</strong></h1> </search-results>

Sin embargo, esto no funciona y generará literalmente {{query}} .

Luego descubrí que podía agregar un parámetro de entrada TemplateRef en mi componente y pasar un elemento ng-template que analizaría las expresiones. Esto funciona bien dentro de una aplicación Angular, pero no estoy seguro de cómo hacerlo fuera de un contexto Angular usando los componentes web compilados que genera Angular Elements.

¿Alguien puede explicar cómo hacer esto?

about 4 years ago · Santiago Gelvez
3 Respostas
Responde à pergunta

0

Veo dos soluciones.

Solución 1: plantilla HTML

Defina unaplantilla HTML y pase su id al componente Angular. Allí clonas ese nodo (ver ejemplo en el enlace) y lo agregas al DOM.

Los marcadores de posición ( {{query}} ) no funcionan "fuera de la caja" en esa plantilla. Puede reemplazarlos manualmente o simplemente actualizar la plantilla y observar los cambios en el componente Angular. ( Observador de mutaciones )

Estoy trabajando en esta idea ahora mismo... Publicaré una actualización aquí una vez que mi código esté en GitHub para que puedas echarle un vistazo.

Solución 2: Plantillas JS

Otra idea es trabajar con plantillas JS. ( EJS por ejemplo)

Usted define una cadena de plantilla que pasa al componente Angular. Allí lo renderiza con el objeto de datos dado.

about 4 years ago · Santiago Gelvez Relatório

0

Puede crear una función que analice la .....{{variable}}... a ...value...

 replaceText(content: string) { const match = content.match(/(\{\{\w+\}\})/g) match?.forEach(x => { const variable = x.slice(2).slice(0, -2) || "fool" const value = (this as any)[variable] || "" content = content.replace(x, value) }) return content }

Luego, almacena el HTML interno de "ng-content" en ngAfterviewInit. Cuando lo necesite, llame a esta función.

Imagine algo como: vea que el "ng-content" está debajo de un div "inner" con display: none

 @Component({ template: ` <div class="alert alert-{{ type }} alert-dismissible" *ngIf="show"> <div [innerHTML]="newContent"></div> <button type="button" class="close"> <span (click)="show = false; closed.emit()">&times;</span> </button> </div> <div #inner class="hidden"> <ng-content></ng-content> </div> `, styles:[` .hidden{ display:none } `] })

En ngAfterVieInit

 @ViewChild('inner', { static: false }) inner!: ElementRef; content:any; ngAfterViewInit(): void { this.content = this.inner.nativeElement.innerHTML; }

y cuando lo necesites

 this.newContent = this.satinizer.bypassSecurityTrustHtml( this.replaceText(this.content || '') );

Ver un stackblitz simple

about 4 years ago · Santiago Gelvez Relatório

0

Utilice el método bypassSecurityTrustHtml de DomSanitizer , proporcionado por un angular; y vincúlelo con html <div [innerHtml]="getSearchText()"></div> .

 public getSearchText() { return this.domSanitizer.bypassSecurityTrustHtml(`You searched for <b>${this.searchText}</b>`); }

Para obtener más información, visite la documentación angular https://angular.io/api/platform-browser/DomSanitizer

about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda