Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

461
Views
En Angular, ¿cómo puede un componente tener múltiples plantillas HTML?

Estoy desarrollando una aplicación de comercio electrónico y una característica importante es que esta aplicación debe tener varios temas. El número total de temas podría ser 100 o incluso más. Sin embargo, todos estos temas tienen los mismos datos (por ejemplo: todas las páginas de inicio tienen las mismas imágenes de banner, productos nuevos, datos de productos destacados).

Sé que puedo usar ng-template o TemplateRef para determinar qué parte de HTML debería mostrarse. Pero como tengo más de 100 temas, los métodos ng-template o TemplateRef cargarán muchos archivos adicionales. Así que creo que necesito algún tipo de carga diferida, cuando un componente carga los datos y luego carga la plantilla HTML correcta. Entonces, ¿cómo puedo tener este trabajo?

Estructura de ideas

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Parece que es posible, todas nuestras rutas son manejadas por módulos con carga diferida. Esta es nuestra configuración de ruta lista para usar:

 const routes: Routes = [ { path: '', loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule) } ];

Mientras que el módulo lazy tiene esta configuración de ruta:

 const routes: Routes = [ { path: 'home', component: HomeComponent }, ]

Mientras que HomeComponent se toma de las declaraciones del módulo lazy .

Luego defina otro módulo, llamado por ejemplo lazy-two con la misma configuración de ruta y su propio HomeComponent .

Finalmente, puede cambiar entre los módulos usando este código:

 lazyLoad() { const routes: Routes = [ { path: '', loadChildren: () => import('./lazy-two/lazy-two.module') .then(m => m.LazyTwoModule) } ]; this.router.resetConfig(routes); this.router.navigateByUrl('/home'); }

Esto cargará de forma diferida el módulo lazy-two y actualizará la ruta a /home ; verá que se muestra el componente del nuevo módulo.

No pude crear un stackblitz, ocurrieron algunos errores probablemente debido a la carga diferida. Así que lo ejecuté localmente en mi máquina y envié el código a GitHub

EDITAR Logré hacer un StackBlitz

over 4 years ago · Santiago Trujillo Report

0

Recomiendo usar ComponentFactoryResolver para crear los componentes que necesita renderizar.

 this.templates = [ { id: "template-1", component: Template1, }, { id: "template-2", component: Template2, }, ]; ngOnInit() { this.templates.forEach((element) => { this.containerReference.createComponent( this.factoryResolver.resolveComponentFactory(element.component) ); }); }

en el .html deberías tener

 <ng-container #containerReference><ng-container>
over 4 years ago · Santiago Trujillo Report

0

¿Qué hay de usar el mismo componente y darle un estilo diferente cuando selecciona la plantilla?

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!