<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cdk-virtual-scroll-viewport &#8211; Sibeesh Passion</title>
	<atom:link href="https://www.sibeeshpassion.com/tag/cdk-virtual-scroll-viewport/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.sibeeshpassion.com</link>
	<description>My passion towards life</description>
	<lastBuildDate>Wed, 24 Oct 2018 20:29:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>/wp-content/uploads/2017/04/Sibeesh_Passion_Logo_Small.png</url>
	<title>cdk-virtual-scroll-viewport &#8211; Sibeesh Passion</title>
	<link>https://www.sibeeshpassion.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Angular Virtual Scrolling &#8211; ngVirtualScrolling</title>
		<link>https://www.sibeeshpassion.com/angular-virtual-scrolling-ngvirtualscrolling/</link>
					<comments>https://www.sibeeshpassion.com/angular-virtual-scrolling-ngvirtualscrolling/#disqus_thread</comments>
		
		<dc:creator><![CDATA[SibeeshVenu]]></dc:creator>
		<pubDate>Wed, 24 Oct 2018 20:12:26 +0000</pubDate>
				<category><![CDATA[Angular]]></category>
		<category><![CDATA[Angular 7]]></category>
		<category><![CDATA[cdk-virtual-scroll-viewport]]></category>
		<category><![CDATA[Deferred Scrolling]]></category>
		<category><![CDATA[ng]]></category>
		<category><![CDATA[ngVirtualScrolling]]></category>
		<category><![CDATA[ScrollingModule]]></category>
		<category><![CDATA[Virtual Scrolling]]></category>
		<guid isPermaLink="false">https://sibeeshpassion.com/?p=13300</guid>

					<description><![CDATA[[toc] Introduction Yes!. Angular 7 is out with some cool new features. I really appreciate that you wanted to experience the brand new Angular. Here in this post, I am going to explain a bit about one of the Angular 7 feature, which is Virtual Scrolling. At the end of this article, you will have an application which fetches the real data from the database and binds it to the UI by using Virtual Scrolling feature. I am not sure about you, but I am super excited to develop a sample application with this feature. Enough talking, let&#8217;s jump into [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>[toc]</p>
<h2>Introduction</h2>
<p>Yes!. Angular 7 is out with some cool new features. I really appreciate that you wanted to experience the brand new <a href="https://sibeeshpassion.com/category/angular/">Angular</a>. Here in this post, I am going to explain a bit about one of the Angular 7 feature, which is Virtual Scrolling. At the end of this article, you will have an application which fetches the real data from the database and binds it to the UI by using Virtual Scrolling feature. I am not sure about you, but I am super excited to develop a sample application with this feature. Enough talking, let&#8217;s jump into the setup. I hope you will find this pose useful.</p>
<h2>Source Code</h2>
<p>The source code can be found <a href="https://github.com/SibeeshVenu/ngVirtualScrolling">here</a>.</p>
<h2>Background</h2>
<p>As Angular 7 is out last week, I wanted to try a few things with the same and that is the cause for this article. If you are really new to Angular, and if you need to try some other things, <a href="https://sibeeshpassion.com/category/angular/">visiting my articles</a> on the same topic wouldn&#8217;t be a bad idea.</p>
<h2>Creating ngVirtualScrolling app</h2>
<p>The first thing we are going to do is to create a dummy application.</p>
<h3>Installing Angular CLI</h3>
<p>Yes, as you guessed, we are using Angular CLI. If you haven&#8217;t installed Angular CLI, I recommend you to install the same. It is a great CLI tool for Angular, I am sure you will love that. You can do that by running the below command.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">npm install -g @angular/cli</pre>
<p>Once we set up this project we will be using the Angular CLI commands and you can see <a href="https://cli.angular.io/">here</a> for understanding the things you can do with the CLI.</p>
<h3>Generating a new project</h3>
<p>Now it is time to generate our new project. We can use the below command for the same.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">ng new ngVirtualScrolling</pre>
<p>And you will be able to see all the hard work this CLI is doing for us.</p>
<div id="attachment_13302" style="width: 660px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/Generate-ng-project-e1540406786190.png"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-13302" class="size-full wp-image-13302" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/Generate-ng-project-e1540406786190.png" alt="Generate ng project" width="650" height="498" /></a><p id="caption-attachment-13302" class="wp-caption-text">Generate ng project</p></div>
<p>Now that we have created our application, let&#8217;s run our application and see if it is working or not.</p>
<div id="attachment_13303" style="width: 644px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/Build-and-open-in-browser-e1540407077398.png"><img decoding="async" aria-describedby="caption-attachment-13303" class="wp-image-13303" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/Build-and-open-in-browser-e1540407077398.png" alt="Build and open in browser" width="634" height="160" /></a><p id="caption-attachment-13303" class="wp-caption-text">Build and open in browser</p></div>
<p>As we develop we will be using the Angular material for the design and we can install it now itself along with the animation and cdk.</p>
<div id="attachment_13304" style="width: 1034px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/install-material-cdk-and-animation.png"><img decoding="async" aria-describedby="caption-attachment-13304" class="wp-image-13304 size-large" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/install-material-cdk-and-animation-1024x54.png" alt="install material, cdk and animation" width="1024" height="54" srcset="/wp-content/uploads/2018/10/install-material-cdk-and-animation-1024x54.png 1024w, /wp-content/uploads/2018/10/install-material-cdk-and-animation-300x16.png 300w, /wp-content/uploads/2018/10/install-material-cdk-and-animation-768x40.png 768w, /wp-content/uploads/2018/10/install-material-cdk-and-animation-400x21.png 400w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p id="caption-attachment-13304" class="wp-caption-text">install material, cdk, and animation</p></div>
<p>With the Angular 6+ versions you can also do this by following the below command.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">ng add @angular/material</pre>
<h3>Generating components</h3>
<p>Now our project is ready and we can start creating the components, again, CLI is going to do the work for us for free. If it is a freelance developer, how much would you pay him/her?</p>
<div id="attachment_13305" style="width: 1034px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/ng-c-home.png"><img decoding="async" aria-describedby="caption-attachment-13305" class="size-large wp-image-13305" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/ng-c-home-1024x116.png" alt="ng c home" width="1024" height="116" srcset="/wp-content/uploads/2018/10/ng-c-home-1024x116.png 1024w, /wp-content/uploads/2018/10/ng-c-home-300x34.png 300w, /wp-content/uploads/2018/10/ng-c-home-768x87.png 768w, /wp-content/uploads/2018/10/ng-c-home-400x45.png 400w, /wp-content/uploads/2018/10/ng-c-home.png 1626w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p id="caption-attachment-13305" class="wp-caption-text">ng g c home</p></div>
<div id="attachment_13306" style="width: 1034px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/ng-c-header.png"><img decoding="async" aria-describedby="caption-attachment-13306" class="size-large wp-image-13306" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/ng-c-header-1024x135.png" alt="ng g c header" width="1024" height="135" srcset="/wp-content/uploads/2018/10/ng-c-header-1024x135.png 1024w, /wp-content/uploads/2018/10/ng-c-header-300x40.png 300w, /wp-content/uploads/2018/10/ng-c-header-768x101.png 768w, /wp-content/uploads/2018/10/ng-c-header-400x53.png 400w, /wp-content/uploads/2018/10/ng-c-header.png 1690w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p id="caption-attachment-13306" class="wp-caption-text">ng g c header</p></div>
<div id="attachment_13307" style="width: 1034px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/ng-c-footer.png"><img decoding="async" aria-describedby="caption-attachment-13307" class="size-large wp-image-13307" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/ng-c-footer-1024x114.png" alt="ng g c footer" width="1024" height="114" srcset="/wp-content/uploads/2018/10/ng-c-footer-1024x114.png 1024w, /wp-content/uploads/2018/10/ng-c-footer-300x33.png 300w, /wp-content/uploads/2018/10/ng-c-footer-768x85.png 768w, /wp-content/uploads/2018/10/ng-c-footer-400x44.png 400w, /wp-content/uploads/2018/10/ng-c-footer.png 1627w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p id="caption-attachment-13307" class="wp-caption-text">ng g c footer</p></div>
<p>Now we have three components to work with. So let&#8217;s begin.</p>
<h3>Set up header component</h3>
<p>I am going to edit only the HTML of the header component for myself and not going to add any logic. You can add anything you wish.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">&lt;div style="text-align:center"&gt;
  &lt;h1&gt;
    Welcome to ngVirtualScrolling at &lt;a href="https://sibeeshpassion.com"&gt;Sibeesh Passion&lt;/a&gt;
  &lt;/h1&gt;
&lt;/div&gt;</pre>
<h3>Set up footer component</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">&lt;p&gt;
  Copyright @SibeeshPassion 2018 - 2019 :)
&lt;/p&gt;
</pre>
<h3>Set up app-routing.module.ts</h3>
<p>We are going to create a route only for home.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';

const routes: Routes = [
  {
    path: '',
    redirectTo: '/home',
    pathMatch: 'full'
  },
  {
    path: 'home',
    component: HomeComponent
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }
</pre>
<h3>Set up router outlet in app.component.html</h3>
<p>Now we have a route and it is time to set up the outlet.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">&lt;app-header&gt;&lt;/app-header&gt;
&lt;router-outlet&gt;
&lt;/router-outlet&gt;
&lt;app-footer&gt;&lt;/app-footer&gt;</pre>
<h3>Set up app.module.ts</h3>
<p>Every Angular app will be having at least one NgModule class, the same is named as and<code>AppModule</code> resides in a file named <code>app.module.ts</code>. You can always learn about the Angular architecture <a href="https://angular.io/guide/architecture-modules">here</a>.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {MatButtonModule, MatCheckboxModule, MatMenuModule, MatCardModule, MatSelectModule} from '@angular/material';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HeaderComponent } from './header/header.component';
import { FooterComponent } from './footer/footer.component';
import { HomeComponent } from './home/home.component';
import { ScrollingModule } from '@angular/cdk/scrolling';
import { MovieComponent } from './movie/movie.component';
import { MovieService } from './movie.service';
import { HttpModule } from '@angular/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
  declarations: [
    AppComponent,
    HeaderComponent,
    FooterComponent,
    HomeComponent,
    MovieComponent
  ],
  imports: [
    HttpModule,
    BrowserModule,
    AppRoutingModule,
    ScrollingModule,
    MatButtonModule, MatCheckboxModule, MatMenuModule, MatCardModule, MatSelectModule, BrowserAnimationsModule
  ],
  exports: [
    HttpModule,
    BrowserModule,
    AppRoutingModule,
    ScrollingModule,
    MatButtonModule, MatCheckboxModule, MatMenuModule, MatCardModule, MatSelectModule
  ],
  providers: [ MovieService ],
  bootstrap: [AppComponent]
})
export class AppModule { }
</pre>
<p>Do you see a ScrollingModule there? You should import it to use the virtual scrolling and it resides in the @angular/cdk/scrolling. As you might have already noticed, we have added one service called MovieService in the providers array. We will create one now.</p>
<h3>Creating a movie service</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Injectable } from '@angular/core';
import { RequestMethod, RequestOptions, Request, Http } from '@angular/http';
import { config } from './config';

@Injectable({
  providedIn: 'root'
})
export class MovieService {
  constructor(private http: Http) {
  }

  get(url: string) {
    return this.request(url, RequestMethod.Get)
  }

  request(url: string, method: RequestMethod): any {
    const requestOptions = new RequestOptions({
      method: method,
      url: `${config.api.baseUrl}${url}${config.api.apiKey}`
    });

    const request = new Request(requestOptions);
    return this.http.request(request);
  }
}
</pre>
<p>As you can see I haven&#8217;t done much with the service class and didn&#8217;t implement the error mechanism and other things as I wanted to make this as short as possible. This service will fetch the movies from an online database <a href="https://www.themoviedb.org/">TMDB</a> and here in this article and repository, I am using mine. I strongly recommend you to create your own instead of using mine. Can we set up the config file now?</p>
<h3>Set up config.ts</h3>
<p>A configuration file is a way to arrange things in handy and you must implement in all the projects you are working with.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">const config = {
  api: {
        baseUrl: 'https://api.themoviedb.org/3/movie/',
        apiKey:'&amp;api_key=c412c072676d278f83c9198a32613b0d',
        topRated:'top_rated?language=en-US&amp;page=1'
    }
}
export { config };</pre>
<h3>Creating a movie component</h3>
<p>Let&#8217;s create a new component now to load the movie into it. Basically, we will be using this movie component inside the cdkVirtualFor so that it will call this component each time and render it. Out movie component will be having the HTML as below.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">&lt;div class="container"&gt;
  &lt;mat-card style="min-height: 500px;" class="example-card"&gt;
    &lt;mat-card-header&gt;
      &lt;div mat-card-avatar class="example-header-image"&gt;&lt;/div&gt;
      &lt;mat-card-title&gt;{{movie?.title}}&lt;/mat-card-title&gt;
      &lt;mat-card-subtitle&gt;Release date: {{movie?.release_date}}&lt;/mat-card-subtitle&gt;
    &lt;/mat-card-header&gt;
    &lt;img mat-card-image src="https://image.tmdb.org/t/p/w370_and_h556_bestv2/{{movie?.poster_path}}" alt="{{movie?.title}}"&gt;
    &lt;mat-card-content&gt;
      &lt;p&gt;
        {{movie?.overview}}
      &lt;/p&gt;
    &lt;/mat-card-content&gt;
  &lt;/mat-card&gt;
&lt;/div&gt;</pre>
<p>And the typescript file will be having one property with @Input decorator so that we can input the values to it from the home component.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Component, OnInit, Input } from '@angular/core';
import { Movie } from '../models/movie';

@Component({
  selector: 'app-movie',
  templateUrl: './movie.component.html',
  styleUrls: ['./movie.component.scss']
})
export class MovieComponent implements OnInit {
  @Input()
  movie: Movie;
  
  constructor() { 
  }

  ngOnInit() {
  }

}
</pre>
<h3>Set up home component</h3>
<p>Now here is the main part, the place where the virtual scrolling is happening. Let&#8217;s design the HTML now.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">&lt;div class="container" style="text-align:center"&gt;
  &lt;div class="row"&gt;
    &lt;cdk-virtual-scroll-viewport itemSize="500" class="example-viewport"&gt;
      &lt;app-movie *cdkVirtualFor="let movie of ds" [movie]="movie" class="example-item"&gt;{{movie || 'Loading...'}}&lt;/app-movie&gt;
    &lt;/cdk-virtual-scroll-viewport&gt;
  &lt;/div&gt;
&lt;/div&gt;</pre>
<p>Here itemSize is a mandatory property and you can give any number as per how many data you want to load to the component. We are inputting the values to our app-movie component by using [movie]=&#8221;movie&#8221;.</p>
<p>Let&#8217;s see the typescript code now.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { DataSource, CollectionViewer } from '@angular/cdk/collections';
import { BehaviorSubject, Subscription, Observable } from 'rxjs';
import { MovieService } from '../movie.service';
import { Movie } from '../models/movie';
import { config } from '../config';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush
})

export class HomeComponent {
  constructor(private movieService: MovieService) {
  }
  ds = new MyDataSource(this.movieService);
}

export class MyDataSource extends DataSource&lt;Movie | undefined&gt; {
  private page = 1;
  private initialData: Movie[] = [
    {
      id: 19404,
      title: 'Dilwale Dulhania Le Jayenge',
      overview: 'Raj is a rich, carefree, happy-go-lucky second generation NRI. Simran is the daughter of Chaudhary Baldev Singh, who in spite of being an NRI is very strict about adherence to Indian values. Simran has left for India to be married to her childhood fiancé. Raj leaves for India with a mission at his hands, to claim his lady love under the noses of her whole family. Thus begins a saga.',
      poster_path: '\/uC6TTUhPpQCmgldGyYveKRAu8JN.jpg'
    }
  ];
  private dataStream = new BehaviorSubject&lt;(Movie | undefined)[]&gt;(this.initialData)
  private subscription = new Subscription();

  constructor(private movieService: MovieService) {
    super();
  }

  connect(collectionViewer: CollectionViewer): Observable&lt;(Movie | undefined)[]&gt; {
    this.subscription.add(collectionViewer.viewChange.subscribe((range) =&gt; {
      console.log(range.start)
      console.log(range.end)
      this.movieService.get(config.api.topRated)
        .subscribe((data) =&gt; {
          this.formatDta(JSON.parse(data._body).results);
        });
    }));
    return this.dataStream;
  }

  disconnect(): void {
    this.subscription.unsubscribe();
  }

  formatDta(_body: Movie[]): void {
    this.dataStream.next(_body);
  }
}
</pre>
<p>I have a parent HomeComponent where I get the data from a class MyDataSource which extends DataSource&lt;Movie | undefined&gt;. This DataSource is an abstract class and residing in @angular/cdk/collections. As the MyDataSource class is extending from DataSource, we had to override two functions which are, connect() and disconnect(). According to the <a href="https://material.angular.io/cdk/scrolling/overview">angular material documentation</a>, The connect method will be called by the virtual scroll viewport to receive a stream that emits the data array that should be rendered. The viewport will call disconnect when the viewport is destroyed, which may be the right time to clean up any subscriptions that were registered during the connect process.</p>
<p>Inside the connect method, we are calling our own service to get the data.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">this.movieService.get(config.api.topRated)
        .subscribe((data) =&gt; {
          this.formatDta(JSON.parse(data._body).results);
        });</pre>
<h3>Custom styling</h3>
<p>I have applied some custom styles to some components, which you can see in the GitHub repository. Please copy those from there if you are creating the application from the scratch.</p>
<h2>Output</h2>
<p>Once you have implemented all the steps, you will be having an application which uses Angular 7 virtual scrolling with actual server data. Now let us run the application and see it in action.</p>
<div id="attachment_13309" style="width: 613px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start.png"><img decoding="async" aria-describedby="caption-attachment-13309" class="size-large wp-image-13309" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start-603x1024.png" alt="Angular Virtual Scrolling Demo Start" width="603" height="1024" srcset="/wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start-603x1024.png 603w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start-177x300.png 177w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start-768x1305.png 768w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start-400x680.png 400w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start-353x600.png 353w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Start.png 964w" sizes="(max-width: 603px) 100vw, 603px" /></a><p id="caption-attachment-13309" class="wp-caption-text">Angular Virtual Scrolling Demo Start</p></div>
<div id="attachment_13310" style="width: 610px" class="wp-caption alignnone"><a href="https://sibeeshpassion.com/wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle.png"><img decoding="async" aria-describedby="caption-attachment-13310" class="size-large wp-image-13310" src="https://sibeeshpassion.com/wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle-600x1024.png" alt="Angular Virtual Scrolling Demo Middle" width="600" height="1024" srcset="/wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle-600x1024.png 600w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle-176x300.png 176w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle-768x1310.png 768w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle-400x682.png 400w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle-352x600.png 352w, /wp-content/uploads/2018/10/Angular-Virtual-Scrolling-Demo-Middle.png 961w" sizes="(max-width: 600px) 100vw, 600px" /></a><p id="caption-attachment-13310" class="wp-caption-text">Angular Virtual Scrolling Demo Middle</p></div>
<p>&nbsp;</p>
<h2><span id="conclusion_1"><span id="conclusion">Conclusion</span></span></h2>
<p>In this post, we have learned how to,</p>
<ol>
<li>Create an angular 7 application</li>
<li>Work with Angular CLI</li>
<li>Generate components in Angular</li>
<li>Use Material design</li>
<li>Work with virtual scrolling in Angular 7</li>
</ol>
<p>Please feel free to play with this GitHub repository. It may not be a perfect article on this topic, so please do share me your findings while you work on the same. I really appreciate that, thanks in advance.</p>
<h2><span id="your-turn-what-do-you-think">Your turn. What do you think?</span></h2>
<p>Thanks a lot for reading. I will come back with another post on the same topic very soon. Did I miss anything that you may think which is needed? Could you find this post as useful? Please share me your valuable suggestions and feedback, but do try to stay on topic. If you have a question unrelated to this post, you’re better off posting it on Stack Overflow instead of commenting here. Tweet or email me a link to your question there and I’ll definitely try to help if I can.</p>
<p>Kindest Regards<br />
Sibeesh Venu</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sibeeshpassion.com/angular-virtual-scrolling-ngvirtualscrolling/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
