Skip to content

docs(scroll-dispatcher): add note about callback being run outside the NgZone #8545

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 20, 2017

Conversation

crisbeto
Copy link
Member

Since the scrolled events are being run outside the NgZone, it might be confusing if people decide to update their view as a result of a scroll event. These changes add a note on the method docs to avoid some of the confusion.

Relates to #8279.

…e NgZone

Since the `scrolled` events are being run outside the NgZone, it might be confusing if people decide to update their view as a result of a scroll event. These changes add a note on the method docs to avoid some of the confusion.

Relates to angular#8279.
@googlebot googlebot added the cla: yes PR author has agreed to Google's Contributor License Agreement label Nov 19, 2017
Copy link
Member

@jelbourn jelbourn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jelbourn jelbourn added pr: lgtm action: merge The PR is ready for merge by the caretaker and removed pr: needs review labels Nov 20, 2017
@jelbourn jelbourn merged commit 192e6b3 into angular:master Nov 20, 2017
@jelbourn
Copy link
Member

The PR here was merged; it added a note to the API docs for ScrollDispatcher, but not for ViewportRuler

@jelbourn
Copy link
Member

Whoops, commented on the wrong thing

@philip-firstorder
Copy link

philip-firstorder commented May 14, 2019

This saved me, thank you very much for commenting this!

For anyone out there, if you use the ScrollDispatcher to add rows to the infinite Mat-Table then you have to do like this:

import { NgZone } from '@angular/core';
import { MatTable } from '@angular/material';

@ViewChild('table') table: MatTable<Element>;

constructor(private ngZone: NgZone) {
 this.scrollDispatcher.scrolled()  
 .pipe(takeUntil(this.ngDestroy$))
 .subscribe((scrollable: CdkScrollable) => {
   const bottom = scrollable ? scrollable.measureScrollOffset('bottom') : null;
   if (bottom <= 0) { // If the user has scrolled to the bottom
     this.ngZone.run(() => {
       this.nextPage();; // Run this in `NgZone.run`, or your table will not renderRows
     });
   }
 });
}

this.nextPage()  {
 this.dataSource = data.length ? data : undefined;
 this.table.renderRows(); // This renders rows only if you used `NgZone.run` above 
}

@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Sep 10, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
action: merge The PR is ready for merge by the caretaker cla: yes PR author has agreed to Google's Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants