рдорд╛рдЗрдХреНрд░реЛ-рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдЕрдкрдирд╛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдмрдирд╛рдПрдВ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред
рд╣рд░ рдХреЛрдИ рдЬрд┐рд╕рдиреЗ рдХреЛрдгреАрдп рдврд╛рдВрдЪреЗ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреЛрдгреАрдп рд╕рд╛рдордЧреНрд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рд▓рдЪреАрд▓реА рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЬреЛ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рджреИрдирд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ, рдПрдХ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд╕рднреА рдлрд╛рдпрджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдкрд░ рд╕рд░реНрд╡реЛрддреНрддрдо-рдЕрднреНрдпрд╛рд╕ рд╡рд┐рдХрд╛рд╕ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореИрдиреБрдЕрд▓ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ MatTableModule рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреЗрдЬрд┐рдВрдЧ рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдб рдХреА рдПрдХ рд╕реВрдЪреА рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдП, рдФрд░ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдореИрдЯрдЯреЗрдмрд▓ рдШрдЯрдХ рдХреЗ рдореЙрдбрд▓ рдореЙрдбрд▓ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВред

рдЯреЗрдореНрдкрд▓реЗрдЯ ( рд╕реНрд░реЛрдд ):

<table mat-table [dataSource]="dataSource" class="mat-elevation-z8"> <ng-container matColumnDef="position"> <th mat-header-cell *matHeaderCellDef> No. </th> <td mat-cell *matCellDef="let element"> {{element.position}} </td> </ng-container> <ng-container matColumnDef="name"> <th mat-header-cell *matHeaderCellDef> Name </th> <td mat-cell *matCellDef="let element"> {{element.name}} </td> </ng-container> <ng-container matColumnDef="weight"> <th mat-header-cell *matHeaderCellDef> Weight </th> <td mat-cell *matCellDef="let element"> {{element.weight}} </td> </ng-container> <ng-container matColumnDef="symbol"> <th mat-header-cell *matHeaderCellDef> Symbol </th> <td mat-cell *matCellDef="let element"> {{element.symbol}} </td> </ng-container> <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr> </table> 

рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдирдЬреА-рдХрдВрдЯреЗрдирд░ рдЯреИрдЧ рдореЗрдВ рдЯреЗрдмрд▓ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдВрджрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдкреНрд░рд╢реНрди рдерд╛ рдЬреЛ рдореИрдВрдиреЗ рдкреВрдЫрд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рджреЗрдЦрд╛ рдерд╛, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореИрдВрдиреЗ рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЖрдЗрдП рдЖрд░рдВрдн рдХрд░реЗрдВ (рд╕реНрд░реЛрдд рдХреЛрдб) ред

рд╕рдВрд░рдЪрдирд╛


рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмреНрд▓реЙрдХ рдЖрд░реЗрдЦ рдЙрдирдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдкрд╣рд▓рд╛ рдХрджрдо


рд╣рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛ-рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 @Injectable() export class RegisterPropertyDef<T> { //        Map //    -  ,     //          //         private store = new Map<ComponentInstance, Map<string, TemplateRef<T>>>(); setTemplateById(cmp: ComponentInstance, id: string, template: TemplateRef<any>): void { const state = this.store.get(cmp) || new Map(); state.set(id, template); this.store.set(cmp, state); } getTemplate(cmp: ComponentInstance, id: string): TemplateRef<T> { return this.store.get(cmp).get(id); } } 

рджреВрд╕рд░рд╛ рдХрджрдо


рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдПрдБ:

 @Directive({ selector: '[providePropertyDefValue]' }) export class ProvidePropertyDefValueDirective<T> implements OnInit { @Input() providePropertyDefValueId: string; constructor( private container: ViewContainerRef, private template: TemplateRef<any>, //       private registerPropertyDefService: RegisterPropertyDefService<any>, //    @Optional() private parent: Alias<T[]> //             ) {} ngOnInit(): void { this.container.clear(); //    ,    this.registerPropertyDefService.setTemplateById( this.parent as ComponentInstance, this.providePropertyDefValueId, this.template ); } } 

рдЪрд░рдг рддреАрди


рдПрдХ рдШрдЯрдХ рдмрдирд╛рдПрдБ:

 @Component({ selector: 'lib-card-list', template: ` <mat-card *ngFor="let source of sources"> <ul> <li *ngFor="let key of displayedColumns"> <span>{{ findColumnByKey(key)?.label }}</span> <span> <ng-container [ngTemplateOutlet]="findColumnByKey(key)?.template || default" [ngTemplateOutletContext]="{ $implicit: source }" ></ng-container> </span> </li> </ul> </mat-card> <ng-template #default></ng-template> `, styles: [ 'mat-card { margin: 10px; }' ] }) export class CardListComponent<T> implements OnInit, AfterViewInit { @Input() defaultColumns: DefaultColumn[]; @Input() source$: Observable<T[]>; displayedColumns = []; sources: T[] = []; constructor(private readonly registerPropertyDefService: RegisterPropertyDefService<T>, private readonly parent: Alias<T[]>) { } ngOnInit() { this.source$.subscribe((data: T[]) => this.sources = data); this.displayedColumns = this.defaultColumns.map(c => c.id); } findColumnByKey(key: string): DefaultColumn { return this.defaultColumns.find(column => column.id === key); } ngAfterViewInit(): void { this.defaultColumns = this.defaultColumns.map(column => Object.assign(column, { template: this.registerPropertyDefService.getTemplate(this.parent as ComponentInstance, column.id) }) ); } } 

рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рдШрдЯрдХ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп ngAfterViewInit рдкрджреНрдзрддрд┐ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдореГрджреНрдз рдХрд░рдирд╛ рд╣реИред рдпрд╣рд╛рдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдбрд┐рдлреЙрд▓реНрдЯрдХреЙрд▓реНрдпреВрдордиреНрд╕ рдореЙрдбрд▓ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ -

 <ng-container [ngTemplateOutlet]="findColumnByKey(key)?.template || default" [ngTemplateOutletContext]="{ $implicit: source }"></ng-container> 

рдпрд╣рд╛рдБ рдПрдХ рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреЛрдк рдореЗрдВ (AngularJS рдореЗрдВ) рд╕реНрдХреЛрдк рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдорд╛рдЗрдХреНрд░реЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд▓реЗрдЯрд░-рдорд╛рдп-рд╡реЗрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдЭреВрда рд╣реЛрдЧрд╛ред

рдХреЗ рдЙрдкрдпреЛрдЧ


 // app.component.html <lib-card-list [defaultColumns]="defaultColumns" [source$]="sources$"></lib-card-list> <ng-container *libProvidePropertyDefValue="let element; id: 'id'"> {{ element.id }} </ng-container> <ng-container *libProvidePropertyDefValue="let element; id: 'title'"> {{ element.title }} </ng-container> 

рд╣рдорд╛рд░реЗ рдирдП рдШрдЯрдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ред

рдПрдирдЬреА-рдХрдВрдЯреЗрдирд░ рдФрд░ рд╣рдорд╛рд░реЗ libProvidePropertyDefValue рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ред

рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИ
тАЬрд░рд╣рдиреЗ рджреЛ; рдЖрдИрдбреА: 'рдЖрдИрдбреА' ┬╗

рдЬрд╣рд╛рдВ рддрддреНрд╡ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рджрд╛рдпрд░рд╛ рд╣реИ рдЬреЛ рд╕реВрдЪреА рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ,
рдЖрдИрдбреА рдорд╛рдЗрдХреНрд░реЛ-рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред

рдЕрдм рдореИрдВ ngOnInit рдореЗрдердб рдореЗрдВ рдкреНрд░реЛрдкреНрд░реЛрдкрд░реНрдЯреАрдбреЗрдлрд╝рд▓реНрдпреВ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

  ngOnInit(): void { this.container.clear(); ... } 

рдЖрдк рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдорд╛рдЗрдХреНрд░реЛ-рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ "рд╕рд╛рдл" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд▓рд┐рдм-рдХрд╛рд░реНрдб-рд▓рд┐рд╕реНрдЯ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдорд╛рд░реНрдХрдЕрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 <lib-card-list [defaultColumns]="defaultColumns" [source$]="sources$"> <ng-container *libProvidePropertyDefValue="let element; id: 'id'"> {{ element.id }} </ng-container> <ng-container *libProvidePropertyDefValue="let element; id: 'title'"> {{ element.title }} </ng-container> </lib-card-list> 

рд╡рд╕реНрддреБрдирд┐рд╖реНрда - рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╣реИред

 @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], providers: [{ provide: Alias, useExisting: forwardRef(() => AppComponent) }] }) export class AppComponent extends Alias<any> { title = 'card-list-example'; defaultColumns: DefaultColumn[] = [ { id: 'id', label: 'ID' }, { id: 'title', label: 'Title' } ]; sources$ = of([ { id: 1, title: 'Hello' }, { id: 2, title: 'World' } ]); } 

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ:
рдкреНрд░рджрд╛рддрд╛: [{рдкреНрд░рджрд╛рди рдХрд░реЗрдВ: рдЙрдкрдирд╛рдо, рдЙрдкрдпреЛрдЧ: рдореМрдЬреВрджрд╛: рдЕрдЧреНрд░реЗрд╖рд┐рдд ((= => AppComponent)}]
рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ, рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯрд░ рд╕реЗ AppComponent рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреИрд╕реЗ рд╕реБрдзрд╛рд░реЗрдВ?


рдЖрдк рдХреЛрдгреАрдп рд╕рд╛рдордЧреНрд░реА рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕реЗ рдкреГрд╖реНрдард╛рдВрдХрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

 // card-list.component.html <mat-paginator [pageSize]="5"showFirstLastButton></mat-paginator> 

 // card-list.component.ts @ViewChild(MatPaginator) paginator: MatPaginator; this.paginator.initialized.subscribe(() => { //     }); this.paginator.page.subscribe((pageEvent: PageEvent) => { //       }) 

рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рдореИрдЯ-рдлреЙрд░реНрдо-рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдкреЗрдЬрд┐рдВрдЧ, рдЕрдкрдбреЗрдЯ рдбреЗрдЯрд╛ рдХреЗ рджреМрд░рд╛рди рдкреЗрдЬреЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╡рд╣ рд╕рдм рд╣реИред рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рд╕рдордп-рд╕рдордп рдкрд░ рдХреЛрдгреАрдп / рд╕рд╛рдордЧреНрд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рд▓рдЪреАрд▓рд╛ рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдЖрдкрдХреЗ рдЬреНрдЮрд╛рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/hi454804/


All Articles