Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Angular2 - Cómo crear un componente reutilizable

Tengo un componente con una tabla e hice mis etiquetas <th></th> para poder ordenar los datos cuando hace clic en una etiqueta th , los datos se ordenan por ASC o DESC

en mi componente establecer el evento de clic y las variables:

 public sort_by = "name"; public sort_order = "asc"; sortTableBy(sort_by:string){ if(sort_by === this.sort_by){ this.sort_order = (this.sort_order === 'asc' ? 'desc' : 'asc'); }else{ this.sort_order = "asc"; this.sort_by = sort_by; } this.updateData(); }

y esta es mi plantilla HTML

 <th> <div (click)="sortTableBy('name')"> <span>User Name</span> <i *ngIf="sort_by == 'name' && sort_order == 'desc'" class="fa fa-sort-up"></i> <i *ngIf="sort_by == 'name' && sort_order == 'asc'" class="fa fa-sort-down"></i> </div> </th>

Porque voy a usar esta tabla más de una vez me gustaría que estuviera más limpia y quiero que quede más o menos así:

 <th> <sortable sortBy="name" value="User Name"></sortable> </th>

No sé cómo crear este tipo de componente y cómo comunicarse entre componentes.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede crear un componente llamado header-sortable y usarlo en el componente principal de la siguiente manera:

 <header-sortable [name]="'User Name'" [prop]="'name'" [sortBy]="sortBy" (sort)="onSort($event)"></header-sortable>

y aquí está el esqueleto del componente

 @Component({ selector:'header-sortable', template: ` <th (click)="sortTableBy()" style="cursor:pointer;"> <div> <span>{{name}}</span> <i *ngIf="sortBy == prop && sort_order == 'desc'" class="fa fa-sort-up"></i> <i *ngIf="sortBy == prop && sort_order == 'asc'" class="fa fa-sort-down"></i> </div> </th> ` }) export class HeaderSortable { @Input() sortBy: string; @Input() name: string; @Input() prop: string; @Output() sort = new EventEmitter<any>(); sortTableBy() { let dir; if( this.sortBy == this.prop) { dir = this.sortBy === 'desc' ? 'asc' : 'desc'; } else { dir = 'desc'; } this.sort.emit({prop, dir}) } }
over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente mueva el método de clic al <th> como se muestra a continuación,

 <th (click)="sortTableBy('name')" style="cursor:pointer;"> <div> <span>User Name</span> <i *ngIf="sort_by == 'name' && sort_order == 'desc'" class="fa fa-sort-up"></i> <i *ngIf="sort_by == 'name' && sort_order == 'asc'" class="fa fa-sort-down"></i> </div> </th>

Nota: Se agregó un estilo para que el usuario sepa que puede hacer clic en él.

Actualización 1: 5 <th> también contendrán el mismo método de clic con un parámetro de entrada como codificado en cadena.

 <th (click)="sortTableBy('name')"> <th (click)="sortTableBy('age')"> <th (click)="sortTableBy('gender')">

y así.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda