angular / angular/components

[Paginator] Does not emit event when changed programatically

Offen
#8,417 23 Kommentare 26 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area: material/paginator P3
Vorherrschende Sprache
TypeScript
Sterne
25k
Forks
6.8k
Ø Merge
1 T. 8 Std.
Gemergte PRs (30 T.)
91

Beschreibung

#### Bug, feature request, or proposal:

Bug

#### What is the expected behavior?

Changing the page index programmatically should emit a `page` event.

#### What is the current behavior?

Assigning to `.pageIndex` does not emit a `page` event. There is no method to jump to a specified page and ensure that an event is emitted.

#### What are the steps to reproduce?

Open [this plunker](https://embed.plnkr.co/dPr77Z/). Enter a (different) page number in the input at the top of the page and click "Go To". The displayed paginator offset ("11-20") changes but the table results do not.

#### What is the use-case or motivation for changing an existing behavior?

The current behavior is wrong. The documentation for the `page` Output says "Event emitted when the paginator changes the page size or page index"; the page index has changed but the event was not emitted.

#### Which versions of Angular, Material, OS, TypeScript, browsers are affected?

Still happening as of Beta 12, at least.

#### Is there anything else we should know?

I checked [paginator.ts](https://github.com/angular/material2/blob/master/src/lib/paginator/paginator.ts) and the event is emitted in various methods that change the page index (next / previous) but not in the setting for pageIndex itself. I don't know why this design decision was made so I hesitate to suggest that it be changed, but we need *some* way to tell the paginator to go to a page as though the user had clicked to get to that page.

In the short term, I noticed that the private method `_changePageSize` is exposed in the typings for this component, and does not check if the size being set is the current size. So I can call

this.paginator._changePageSize(this.paginator.pageSize);

to force the paginator to emit a `page` event. Of course it's a pretty awful hack, but it gets the intended behavior. It'd be nice to avoid this in a future release.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit src/lib/paginator/paginator.ts, wo das page event bei Änderungen zur nächsten und vorherigen Seite emittiert wird, und reproduziere das Problem mit dem verlinkten Plunker. Verfolge den pageIndex setter und das damit verbundene Paginator-Verhalten; fertig ist es, wenn programmatische Seitenänderungen das page event emittieren, sodass die Ergebnisse der konsumierenden Tabelle konsistent aktualisiert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
angular, typescript
Bereich
frontend
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.