Skip to content

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