<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ankit Prajapati</title>
    <description>The latest articles on Forem by Ankit Prajapati (@ankitprajapati).</description>
    <link>https://forem.com/ankitprajapati</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F243144%2F8087fdac-7a28-48d0-b8ec-6331567cf1fe.jpg</url>
      <title>Forem: Ankit Prajapati</title>
      <link>https://forem.com/ankitprajapati</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ankitprajapati"/>
    <language>en</language>
    <item>
      <title>Angular SEO - Integrate Google Analytics in Angular </title>
      <dc:creator>Ankit Prajapati</dc:creator>
      <pubDate>Wed, 30 Sep 2020 16:07:32 +0000</pubDate>
      <link>https://forem.com/ankitprajapati/integrate-google-analytics-with-angular-10-52b3</link>
      <guid>https://forem.com/ankitprajapati/integrate-google-analytics-with-angular-10-52b3</guid>
      <description>&lt;p&gt;&lt;a href="https://analytics.google.com/"&gt;Google Analytics&lt;/a&gt; is a popular analytical tool for web and mobile applications from Google. It helps to track real-time and historical website traffic stats.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kLHzMKOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.ngdevelop.tech/wp-content/uploads/2020/08/Real-time-users-snapshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kLHzMKOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.ngdevelop.tech/wp-content/uploads/2020/08/Real-time-users-snapshot.png" alt="Google Analytics Real-Time Traffic Stats"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Google Analytics data helps to do &lt;strong&gt;SEO (Search Engine Optimization)&lt;/strong&gt; of web and mobile apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Key Features of Google Analytics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracking web site traffic, page views, sessions, bounce rate.&lt;/li&gt;
&lt;li&gt;Tracking traffic sources, events, conversations, referrals.&lt;/li&gt;
&lt;li&gt;Provides information about new users and returning users details, page load time.&lt;/li&gt;
&lt;li&gt;Provides information about user demographics, device type, mobile device screen resolution, language, browser and OS details, network details&lt;/li&gt;
&lt;li&gt;User acquisition details, Search console details like search queries, landing pages.&lt;/li&gt;
&lt;li&gt;Campaign details, Traffic through Google Ads, social media traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and many more things. It provides reports of each above feature, which helps to analyze your users and take further business decisions to increase the growth of the product, website, or app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In this article, we will see how to integrate google analytics in angular application.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 Checkout original article for detailed explanation : &lt;a href="https://www.ngdevelop.tech/integrate-google-analytics-with-angular-angular-seo/"&gt;Integrate Google Analytics with Angular&lt;/a&gt; at &lt;a href="https://www.ngdevelop.tech/blog/"&gt;NgDevelop&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How Google Analytics Track Page Views?
&lt;/h2&gt;

&lt;p&gt;Google analytics provides a &lt;em&gt;tracking code snippet&lt;/em&gt;, which we need to put in the &lt;code&gt;HEAD&lt;/code&gt; section of each page. When that page is loaded it will trigger an event to capture a page view.&lt;/p&gt;

&lt;p&gt;This approach works well for &lt;em&gt;traditional web applications&lt;/em&gt; because for each page view tracking code snippet will be loaded and executed. &lt;/p&gt;

&lt;p&gt;However, In &lt;em&gt;Single Page Application (SPA)&lt;/em&gt; has a single &lt;code&gt;index.html&lt;/code&gt; where all other routes are dynamically rendered, because of that that tracking code snippet will be loaded only once. So that the google analytics event will be triggered only once when the initial page is rendered. &lt;/p&gt;

&lt;p&gt;So in angular, to capture different route change we need manually trigger page view events.&lt;/p&gt;

&lt;p&gt;So let's do it...&lt;/p&gt;

&lt;h2&gt;
  
  
  Application Setup
&lt;/h2&gt;

&lt;p&gt;In this article, we will not cover angular application development from scratch. &lt;/p&gt;

&lt;p&gt;👉 Learn &lt;a href="https://www.ngdevelop.tech/angular/get-started/"&gt;Angular Application Development from Scratch&lt;/a&gt; here.&lt;/p&gt;

&lt;p&gt;I have created one angular application which has two routes &lt;code&gt;/home&lt;/code&gt; and &lt;code&gt;/demo&lt;/code&gt;. We will integrate google analytics in this application to capture page views.&lt;/p&gt;

&lt;p&gt;We will require the google analytics tracking code to track our application. &lt;/p&gt;

&lt;h2&gt;
  
  
  Get Google Analytics Tracking Code for Application
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to &lt;em&gt;Google Analytics&lt;/em&gt; &lt;/li&gt;
&lt;li&gt;Open &lt;em&gt;Admin Panel&lt;/em&gt; and click on &lt;code&gt;+ Create Property&lt;/code&gt;.
&lt;em&gt;A property represents your website or app and is the collection point in Analytics for the data from your site or app. You can create multiple properties with one google analytics account.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Select Web or App and fill the required details – Website name, website URL, Industry Category and TimeZone&lt;/li&gt;
&lt;li&gt;Now click on the &lt;code&gt;create&lt;/code&gt; button to create a property.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once your property is created it will generate a &lt;em&gt;global site tag(gtag.js) snippet&lt;/em&gt; for your application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Global site tag (gtag.js) - Google Analytics --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;async&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.googletagmanager.com/gtag/js?id=TRACKING_CODE"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataLayer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataLayer&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="nx"&gt;dataLayer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;);}&lt;/span&gt;
  &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="nx"&gt;TRACKING_CODE&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Note: &lt;code&gt;TRACKING_CODE&lt;/code&gt; is your application’s unique tracking code, it will be like &lt;code&gt;UA-XXXXX-X&lt;/code&gt;&lt;br&gt;
Now, above tracking code snippet we will install in our application to track page views.&lt;/p&gt;
&lt;h2&gt;
  
  
  Install Tracking Code Snippet In Angular
&lt;/h2&gt;

&lt;p&gt;Copy and paste the tracking code in &lt;code&gt;head&lt;/code&gt; section of &lt;code&gt;index.html&lt;/code&gt; as shown below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    ... 
    ... 
    &lt;span class="c"&gt;&amp;lt;!-- Global site tag (gtag.js) - Google Analytics --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;async&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.googletagmanager.com/gtag/js?id=TRACKING-CODE"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataLayer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataLayer&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;dataLayer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

        &lt;span class="cm"&gt;/** Disable automatic page view hit to fix duplicate page view count  **/&lt;/span&gt;
        &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TRACKING-CODE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;send_page_view&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;app-root&amp;gt;&lt;/span&gt;App Loading...&lt;span class="nt"&gt;&amp;lt;/app-root&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;TRACKING-CODE&lt;/code&gt; with your tracking code. it will be like &lt;code&gt;UA-XXXXX-X&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: &lt;code&gt;gtag(config, TRACKING-CODE)&lt;/code&gt; trigger’s an event to capture page view, but in our app, we will capture page views on route change.&lt;br&gt;
So REPLACE &lt;code&gt;gtag(config, TRACKING-CODE)&lt;/code&gt; with &lt;code&gt;gtag('config', 'TRACKING-CODE', { send_page_view: false});&lt;/code&gt; So that it doesn’t count page view twice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Trigger Page View Event On Route Change
&lt;/h2&gt;

&lt;p&gt;Here, We want to trigger the google analytics page view event on route change. &lt;/p&gt;

&lt;p&gt;For this, we need to subscribe to the &lt;code&gt;Router.events&lt;/code&gt; and on &lt;code&gt;NavigationEnd&lt;/code&gt; event we will trigger the google analytics page view event. &lt;/p&gt;

&lt;p&gt;We will add router event subscription in &lt;code&gt;app.component.ts&lt;/code&gt;. You can also create separate service to handle google analytics page views and events.&lt;/p&gt;

&lt;p&gt;We will use &lt;code&gt;gtag&lt;/code&gt; function which is globally exported by &lt;code&gt;gtag.js&lt;/code&gt; to trigger a google analytics page view event.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NavigationEnd&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/router&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rxjs/operators&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;templateUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app.component.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;styleUrls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app.component.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;AppComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="p"&gt;...&lt;/span&gt;

  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;NavigationEnd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NavigationEnd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

      &lt;span class="cm"&gt;/** START : Code to Track Page View  */&lt;/span&gt;

       &lt;span class="nx"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;event&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;page_view&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;page_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;urlAfterRedirects&lt;/span&gt;
       &lt;span class="p"&gt;})&lt;/span&gt;

      &lt;span class="cm"&gt;/** END */&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Great ✨✨✨ We are done with the google analytics setup in angular. &lt;/p&gt;

&lt;p&gt;Now open &lt;em&gt;google analytics&lt;/em&gt; and test whether it is capturing page views properly or not.&lt;/p&gt;

&lt;p&gt;As you can see below, Google Analytics is now showing the number of users and active pages. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kLHzMKOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.ngdevelop.tech/wp-content/uploads/2020/08/Real-time-users-snapshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kLHzMKOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.ngdevelop.tech/wp-content/uploads/2020/08/Real-time-users-snapshot.png" alt="Google Analytics Real-Time Snapshot of PageViews"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Specific Google Analytics Setup with Angular
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Check out the original article: 📄&lt;a href="https://www.ngdevelop.tech/integrate-google-analytics-with-angular-angular-seo/"&gt;Integrate Google Analytics with Angular&lt;/a&gt; for step by step implementation of environment-specific google analytics setup with angular.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this article, we have seen the integration of Google Analytics with Angular. We have seen how to trigger the pageview event manually on route change.&lt;/p&gt;

&lt;p&gt;I hope you like this article, please provide your valuable feedback and suggestions in the comment section below🙂.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give your 🤎 with Like and Share. Follow me on twitter &lt;a href="https://twitter.com/ankit_ngdevelop"&gt;@Ankit_NgDevelop&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>seo</category>
    </item>
    <item>
      <title>Develop Charts in Angular with NGX-CHARTS</title>
      <dc:creator>Ankit Prajapati</dc:creator>
      <pubDate>Tue, 30 Jun 2020 18:54:02 +0000</pubDate>
      <link>https://forem.com/ankitprajapati/develop-charts-in-angular-with-ngx-charts-3dh8</link>
      <guid>https://forem.com/ankitprajapati/develop-charts-in-angular-with-ngx-charts-3dh8</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oCI2jxP5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0vqj4jsszaqboblyaeks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oCI2jxP5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0vqj4jsszaqboblyaeks.png" alt="Charts in Angular with NGX-CHARTS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Charts helps us to visualize large amount of data in an easy to understand and interactive way.&lt;/p&gt;

&lt;p&gt;This helps businesses to grow more by taking important decisions from the data.&lt;/p&gt;

&lt;p&gt;For example, e-commerce can have charts or reports for product sales, with various categories like product type, year, etc.&lt;/p&gt;

&lt;p&gt;In angular, we have various charting libraries to create charts. Ngx-charts is one of them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Check out the list of &lt;a href="https://www.ngdevelop.tech/best-angular-chart-libraries/"&gt;best angular chart libraries&lt;/a&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  In this article, we will see data visualization with ngx-charts and how to use ngx-charts in angular application ?
&lt;/h2&gt;

&lt;p&gt;We will see,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to install ngx-charts in angular ?&lt;/li&gt;
&lt;li&gt;Create a vertical bar chart&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 This article was originally published at &lt;a href="https://www.ngdevelop.tech/blog/"&gt;NgDevelop Blogs&lt;/a&gt;. &lt;strong&gt;Checkout the complete article &lt;a href="https://www.ngdevelop.tech/how-to-use-ngx-charts-in-angular/"&gt;How to use ngx-charts in angular ?&lt;/a&gt;&lt;/strong&gt;. This article includes other important chart examples. like pie chart, advanced pie chart and pie chart grid.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://swimlane.gitbook.io/ngx-charts/"&gt;ngx-charts&lt;/a&gt; is an open-source and declarative charting framework for angular2+. It is maintained by &lt;a href="https://swimlane.com/"&gt;Swimlane&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is using Angular to render and animate the SVG elements with all of its binding and speed goodness and uses d3 for the excellent math functions, scales, axis and shape generators, etc.&lt;/p&gt;

&lt;p&gt;By having Angular do all of the renderings it opens us up to endless possibilities the Angular platform provides such as AoT, Universal, etc.&lt;/p&gt;

&lt;p&gt;ngx-charts supports various chart types like bar charts, line charts, area charts, pie charts, bubble charts, doughnut charts, guage charts, heatmap, treemap and number cards.&lt;/p&gt;

&lt;p&gt;It also supports features like autoscaling, timeline filtering, line interpolation, configurable axis, legends, real-time data support and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ngx-charts Installation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create a new angular application using the following command
(Note: skip this step if you want to add ngx-charts in the existing angular application, At the time of writing this article I was using angular 9).
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng new ngx-charts-demo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install &lt;code&gt;ngx-charts&lt;/code&gt; package in an angular application using the following command.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @swimlane/ngx-charts --save
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;At the time of installation if you get the following error
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR in The target entry-point "@swimlane/ngx-charts" has missing dependencies:
 - @angular/cdk/portal
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;we need to add &lt;code&gt;@angular/cdk&lt;/code&gt; using the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @angular/cdk --save
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Import &lt;code&gt;NgxChartsModule&lt;/code&gt; from 'ngx-charts' in &lt;code&gt;AppModule&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ngx-charts also required the &lt;code&gt;BrowserAnimationsModule&lt;/code&gt;. Import it in &lt;code&gt;AppModule&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So our final &lt;code&gt;AppModule&lt;/code&gt; will look like :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BrowserModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/platform-browser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NgModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AppComponent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app.component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NgxChartsModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@swimlane/ngx-charts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BrowserAnimationsModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/platform-browser/animations&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;NgModule&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;declarations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;AppComponent&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;BrowserModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;BrowserAnimationsModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;NgxChartsModule&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
  &lt;span class="na"&gt;bootstrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;AppComponent&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;AppModule&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Great, Installation steps are done. Now let’s develop various charts using &lt;code&gt;ngx-charts&lt;/code&gt; components.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;AppComponent&lt;/code&gt; we will create the following sales data array. We will use this object to generate charts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;templateUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app.component.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;styleUrls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app.component.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;AppComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;saleData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mobiles&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;105000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Laptop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;55000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AC&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Headset&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fridge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20000&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now lets use this data to create a vertical bar chart with ngx-charts bar chart component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vertical Bar Chart
&lt;/h2&gt;

&lt;p&gt;To generate a vertical bar chart, &lt;code&gt;ngx-charts&lt;/code&gt; provide &lt;code&gt;ngx-charts-bar-vertical&lt;/code&gt; component, add it on the template as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ngx-charts-bar-vertical&lt;/span&gt; 
    &lt;span class="na"&gt;[view]=&lt;/span&gt;&lt;span class="s"&gt;"[1000,400]"&lt;/span&gt;
    &lt;span class="na"&gt;[results]=&lt;/span&gt;&lt;span class="s"&gt;"saleData"&lt;/span&gt;
    &lt;span class="na"&gt;[xAxisLabel]=&lt;/span&gt;&lt;span class="s"&gt;"'Products'"&lt;/span&gt;
    &lt;span class="na"&gt;[legendTitle]=&lt;/span&gt;&lt;span class="s"&gt;"'Product Sale Chart'"&lt;/span&gt;
    &lt;span class="na"&gt;[yAxisLabel]=&lt;/span&gt;&lt;span class="s"&gt;"'Sale'"&lt;/span&gt;
    &lt;span class="na"&gt;[legend]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
    &lt;span class="na"&gt;[showXAxisLabel]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
    &lt;span class="na"&gt;[showYAxisLabel]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
    &lt;span class="na"&gt;[xAxis]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
    &lt;span class="na"&gt;[yAxis]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
    &lt;span class="na"&gt;[gradient]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ngx-charts-bar-vertical&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bo1Bv28F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yk8qhgeezw68wu7trg9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bo1Bv28F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yk8qhgeezw68wu7trg9w.png" alt="Vertical Bar Chart Generated with Ngx-Charts"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Vertical Bar Chart of Sales Data&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;👉 Important properties of &lt;code&gt;ngx-charts-bar-vertical&lt;/code&gt; component&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;results&lt;/code&gt;: To render &lt;code&gt;salesData&lt;/code&gt; chart we need to assign this data object to results &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;view&lt;/code&gt;: set width and height of chart view&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xAxisLabel&lt;/code&gt;: set x-axis label&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;legendTitle&lt;/code&gt;: set legend title&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;legend&lt;/code&gt; : if you want to show legend set it to &lt;code&gt;true&lt;/code&gt;, default it is &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;showXAxisLabel&lt;/code&gt; : set &lt;code&gt;true&lt;/code&gt; to show x-axis label.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;showYAxisLabel&lt;/code&gt; : set &lt;code&gt;true&lt;/code&gt; to show y-axis label.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xAxis&lt;/code&gt; / &lt;code&gt;yAxis&lt;/code&gt; : set &lt;code&gt;true&lt;/code&gt; to show specific axis.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gradient&lt;/code&gt;: set it to &lt;code&gt;true&lt;/code&gt; to show bar with gradient background. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pie Chart, Advanced Pie Chart and Pie Chart Grid
&lt;/h3&gt;

&lt;p&gt;👉 Checkout complete article at &lt;a href="https://www.ngdevelop.tech/how-to-use-ngx-charts-in-angular/"&gt;How to use ngx-charts in angular application&lt;/a&gt;?.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this article, We have seen data visualization with ngx-charts in angular application. We have installed the ngx-charts library and created vertical bar chart using sample sales data. &lt;/p&gt;

&lt;p&gt;I hope you like this article, please provide your valuable feedback and suggestions in below comment section🙂. &lt;/p&gt;

&lt;p&gt;For more updates, Follow us 👍 on &lt;a href="https://www.facebook.com/ngdevelop.tech/"&gt;NgDevelop Facebook page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checkout the other &lt;a href="https://www.ngdevelop.tech/best-angular-chart-libraries/"&gt;best angular chart libraries&lt;/a&gt;.
&lt;/h3&gt;

</description>
      <category>angular</category>
      <category>ngxcharts</category>
      <category>charts</category>
    </item>
    <item>
      <title>Implement Angular Server Side Rendering and Deploy Angular Universal App to Firebase with Schematics</title>
      <dc:creator>Ankit Prajapati</dc:creator>
      <pubDate>Thu, 21 May 2020 03:52:24 +0000</pubDate>
      <link>https://forem.com/ankitprajapati/implement-angular-server-side-rendering-and-deploy-angular-universal-app-to-firebase-with-schematics-4nin</link>
      <guid>https://forem.com/ankitprajapati/implement-angular-server-side-rendering-and-deploy-angular-universal-app-to-firebase-with-schematics-4nin</guid>
      <description>&lt;p&gt;In this article, we will see, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to implement angular server-side rendering with just one command using angular universal schematic.&lt;/li&gt;
&lt;li&gt;Deploy Angular Universal Project as a Firebase Cloud function using firebase schematic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before we start with the implementation of server-side rendering in Angular with Angular Universal, let’s see why server-side rendering and what is Angular Universal?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This blog originally published🚀 at &lt;a href="https://www.ngdevelop.tech/blog/" rel="noopener noreferrer"&gt;NgDevelop&lt;/a&gt;'s Blogs : Checkout the complete article at 📄&lt;a href="https://www.ngdevelop.tech/implement-angular-server-side-rendering/" rel="noopener noreferrer"&gt;Implement Angular Server Side Rendering With Just One Command&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Quick View
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2020%2F05%2FImplement-Angular-Server-Side-Rendering-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2020%2F05%2FImplement-Angular-Server-Side-Rendering-1.png" alt="Implement Angular SSR and Angular Universal App Deployment to Firebase"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: &lt;a href="https://www.ngdevelop.tech/implement-angular-server-side-rendering/" rel="noopener noreferrer"&gt;NgDevelop Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Why Server-Side Rendering? and What is Angular Universal?
&lt;/h1&gt;

&lt;p&gt;Loading the first-page quickly is a critical part of any web application.&lt;/p&gt;

&lt;p&gt;Normal Angular applications get loaded only when it loads the required &lt;code&gt;main.js&lt;/code&gt;, &lt;code&gt;vendor.js&lt;/code&gt;, &lt;code&gt;pollyfills.js&lt;/code&gt; and &lt;code&gt;runtime.js&lt;/code&gt;. As your &lt;code&gt;main.js&lt;/code&gt; size increases initial loading time also increases. &lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://www.thinkwithgoogle.com/marketing-resources/data-measurement/mobile-page-speed-new-industry-benchmarks/" rel="noopener noreferrer"&gt;2018 research by Google&lt;/a&gt;, 53% of mobile users leave a site that takes longer than three seconds to load.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2019%2F09%2Fmobile-page-speed-new-industry-benchmarks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2019%2F09%2Fmobile-page-speed-new-industry-benchmarks.png" alt="Source : Google/SOASTA Research, 2017."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can optimize the initial loading time of angular application using angular universal (server-side rendering).&lt;/p&gt;

&lt;p&gt;This will quickly load the initial page, which will give the user a chance to quickly view the initial layout until a complete angular application becomes fully interactive.&lt;/p&gt;

&lt;p&gt;Server-Side Rendering also helps in SEO (Search Engine Optimization) and Improving performance on mobile and low powered devices.&lt;/p&gt;
&lt;h1&gt;
  
  
  Implement Angular Server Side Rendering with Just One Command
&lt;/h1&gt;

&lt;p&gt;In Angular 9 release, Angular Universal Team came up with a &lt;code&gt;ng add&lt;/code&gt; schematic to implement SSR in angular application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng add @nguniversal/express-engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2020%2F05%2Fng-add-universal.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2020%2F05%2Fng-add-universal.gif" alt="ng add @nguniversal/express-engine"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Angular universal schematic execution&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Source: &lt;a href="https://www.ngdevelop.tech/implement-angular-server-side-rendering/" rel="noopener noreferrer"&gt;Implement Angular Server Side Rendering Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This schematic will add and update all required files to implement server-side rendering in angular application. &lt;/p&gt;

&lt;p&gt;This will add the following files : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;src/main.server.ts &lt;/li&gt;
&lt;li&gt;src/app/app.server.module.ts&lt;/li&gt;
&lt;li&gt;tsconfig.server.json&lt;/li&gt;
&lt;li&gt;server.ts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and update the following files :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;angular.json&lt;/li&gt;
&lt;li&gt;package.json&lt;/li&gt;
&lt;li&gt;src/main.ts&lt;/li&gt;
&lt;li&gt;src/app/app.module.ts&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Server-Side Rendering on Local System
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;@nguniversal/express-engine&lt;/code&gt; schematic also add the CLI builders to start server-side rendering on the local system and generating production build with SSR.&lt;/p&gt;

&lt;p&gt;This schematic adds the following &lt;code&gt;scripts&lt;/code&gt; in &lt;code&gt;package.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"dev:ssr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng run [project_name]:serve-ssr"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"serve:ssr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node dist/[project_name]/server/main.js"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"build:ssr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng build --prod &amp;amp;&amp;amp; ng run [project_name]:server:production"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"prerender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng run [project_name]:prerender"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the following command, We can start rendering our app with Universal on the local system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev:ssr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will serve the angular application with server-side rendered pages on &lt;code&gt;localhost:4200&lt;/code&gt;. you can confirm angular universal implementation by looking into the page source. &lt;/p&gt;

&lt;p&gt;If you find rendered HTML in the page source, Great !!! angular universal implementation is done ✨✨✨&lt;/p&gt;

&lt;h1&gt;
  
  
  Deploy Angular Universal App to Firebase
&lt;/h1&gt;

&lt;p&gt;Angular Firebase Team also has added a new feature in &lt;code&gt;ng add @angular/fire&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;While you add the &lt;code&gt;@angular/fire&lt;/code&gt; using &lt;code&gt;ng add&lt;/code&gt;, it will check whether the current project is an angular universal project, if yes it will ask the following question.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;We detected the Angular Universal Project, Do you want to deploy it as a Firebase Function?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you enter &lt;code&gt;y/yes&lt;/code&gt; here, it will install some more packages to implement firebase cloud functions to deploy angular universal project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2020%2F05%2Fng-add-angular-fire.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2020%2F05%2Fng-add-angular-fire.gif" alt="Deploy Angular Universal as a Firebase Cloud Function : ng add @angular/fire"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Deploy Angular Universal as a Firebase Cloud Function : ng add @angular/fire&lt;/em&gt; &lt;em&gt;Source: &lt;a href="https://www.ngdevelop.tech/implement-angular-server-side-rendering/" rel="noopener noreferrer"&gt;Implement Angular Server Side Rendering Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once Firebase installation is done we can 🚀deploy our angular universal project to firebase using just &lt;code&gt;ng deploy&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Once the application is hosted on the server, it will give you the running URL. Open this URL in a browser, and verify whether Server Side Rendering is done or not.&lt;/p&gt;

&lt;p&gt;If all the above steps are successfully executed, Great!!! You have successfully deployed your angular universal app to firebase.✨✨✨&lt;/p&gt;

&lt;p&gt;Checkout the sample deployed application here : &lt;a href="https://angularpractice-c30b3.web.app/" rel="noopener noreferrer"&gt;https://angularpractice-c30b3.web.app/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Checkout the original article here : &lt;a href="https://www.ngdevelop.tech/implement-angular-server-side-rendering/" rel="noopener noreferrer"&gt;Implement Angular Server Side Rendering&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I hope you like this article, please provide your valuable feedback and suggestions in below comment section🙂.&lt;/p&gt;

&lt;h3&gt;
  
  
  Show your ❤ with like and comments.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Thank you.
&lt;/h3&gt;

</description>
      <category>angular</category>
      <category>firebase</category>
    </item>
    <item>
      <title>Exporting Data to Excel file in Angular using ExcelJS</title>
      <dc:creator>Ankit Prajapati</dc:creator>
      <pubDate>Sun, 29 Mar 2020 07:54:38 +0000</pubDate>
      <link>https://forem.com/ankitprajapati/exporting-data-to-excel-file-in-angular-using-exceljs-k13</link>
      <guid>https://forem.com/ankitprajapati/exporting-data-to-excel-file-in-angular-using-exceljs-k13</guid>
      <description>&lt;p&gt;Generating Reports in Excel Sheet is a common use case for any application. There are different ways to generate excel file in Web application. You can generate it on server and download it on client side. Also another approach is you can generate Excel file on client-side (directly in browser).&lt;/p&gt;

&lt;p&gt;Client-Side Excel file generation can be very helpful for reducing API calls and real-time excel sheet generation (without calling any API). &lt;/p&gt;

&lt;p&gt;In this article, we will see &lt;strong&gt;How to export an excel file in Angular application ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2018%2F08%2FExport-an-excel-using-Angular-6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2018%2F08%2FExport-an-excel-using-Angular-6.jpg" alt="Excel Generated using ExcelJS in Angular"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This article is originally published on &lt;a href="https://www.ngdevelop.tech/blog/" rel="noopener noreferrer"&gt;NgDevelop Blog&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Check out the original article 📰 &lt;a href="https://www.ngdevelop.tech/export-to-excel-in-angular-6/" rel="noopener noreferrer"&gt;Export to Excel in Angular using ExcelJS (Client Side Excel Generation in Angular)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Client-Side Excel Generation Libraries
&lt;/h2&gt;

&lt;p&gt;Two important open source libraries available to read/write an excel in the client-side web applications are :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/exceljs" rel="noopener noreferrer"&gt;ExcelJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/xlsx" rel="noopener noreferrer"&gt;XLSX&lt;/a&gt; and &lt;a href="https://www.npmjs.com/package/xlsx-style" rel="noopener noreferrer"&gt;XLSX-Style&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both libraries are used to read, manipulate and write spreadsheet data and styles to XLSX and JSON.&lt;/p&gt;

&lt;p&gt;Initially, I had used &lt;strong&gt;XLSX &amp;amp; XLSX-style&lt;/strong&gt; libraries to create and format an excel from JSON but the adverse point of this open-source library is it doesn’t provide any feature to add an image in excel (add image feature is available in pro version), which was the big requirement for my excel.&lt;/p&gt;

&lt;p&gt;Later on, I found &lt;strong&gt;ExcelJS&lt;/strong&gt;, which is really easy to use, provide almost all the features of Excel, and the main thing is it also provide add image feature.&lt;/p&gt;

&lt;p&gt;So lets start with step by step implementation :&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Setup
&lt;/h2&gt;




&lt;h3&gt;
  
  
  Create a Angular Project
&lt;/h3&gt;

&lt;p&gt;Create a new angular project, if it is already created then go ahead with next step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install ExcelJS Library
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;npm install --save exceljs&lt;/code&gt;&lt;br&gt;
&lt;em&gt;Note: if you are using Angular 8 or below, then install &lt;code&gt;exceljs@1.12.0&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Update tsconfig.js
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ExcelJS&lt;/strong&gt; is generally used for server side web applications in node. Here we want to use it in client side Angular application. for that we need to set &lt;code&gt;compilerOptions&lt;/code&gt; in &lt;code&gt;tsconfig.json&lt;/code&gt; as shown below :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;compilerOptions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;paths&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;exceljs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node_modules/exceljs/dist/exceljs.min&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;for Angular 4 &amp;amp; 5 configuration checkout out my &lt;a href="https://www.ngdevelop.tech/export-to-excel-in-angular-6/" rel="noopener noreferrer"&gt;original blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Install file-saver
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/file-saver" rel="noopener noreferrer"&gt;FileSaver.js&lt;/a&gt; is the solution to saving files on the client-side and is perfect for web apps that need to generate files, or for saving sensitive information that shouldn’t be sent to an external server.&lt;/p&gt;

&lt;p&gt;It implements the &lt;code&gt;saveAs()&lt;/code&gt; FileSaver interface in browsers that do not natively support it.&lt;/p&gt;

&lt;p&gt;Install file-saver library using following command&lt;br&gt;
&lt;code&gt;npm install --save file-saver&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate Excel with Formatting
&lt;/h2&gt;




&lt;p&gt;Environment setup is done. Now lets start to build an excel.&lt;/p&gt;

&lt;p&gt;We will create a separate service in our project called &lt;code&gt;excel.service.ts&lt;/code&gt;,  you can create it using below command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ng generate service excel&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Import ExcelJS and FileSaver
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;excel.service.ts&lt;/code&gt;, add the following import statements.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Workbook&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;exceljs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;file-saver&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Create a separate method and data variables.
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;excel.service.ts&lt;/code&gt;, We will create a separate method called &lt;code&gt;generateExcel()&lt;/code&gt;.&lt;br&gt;
In this method, I have created some data variables as below, We will export these data in excel sheet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: You can pass data from the component as a parameter in &lt;code&gt;generateExcel()&lt;/code&gt; and generate a dynamic excel sheet.&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Car Sell Report&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;header&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Year&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Month&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Make&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Quantity&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pct&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Volkswagen &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Volkswagen Passat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1267&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toyota &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toyota Rav4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;819&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toyota &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toyota Avensis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;787&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Volkswagen &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Volkswagen Golf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;720&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toyota &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toyota Corolla&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;691&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Create Workbook and Add Worksheet
&lt;/h3&gt;

&lt;p&gt;Create a new workbook and add a new worksheet using &lt;code&gt;addWorksheet()&lt;/code&gt; method of &lt;code&gt;Workbook&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;workbook&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Workbook&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;worksheet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;workbook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addWorksheet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Car Data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Add Row and format the fonts.
&lt;/h3&gt;

&lt;p&gt;We will use &lt;code&gt;addRow()&lt;/code&gt; method of &lt;code&gt;worksheet&lt;/code&gt; object. to add a row in a worksheet. as below,&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// Add new row&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;titleRow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addRow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// Set font, size and style in title row.&lt;/span&gt;
&lt;span class="nx"&gt;titleRow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;font&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Comic Sans MS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;double&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Blank Row&lt;/span&gt;
&lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addRow&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

&lt;span class="c1"&gt;//Add row with current date&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;subTitleRow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addRow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Date : &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;datePipe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)]);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Add Image in worksheet
&lt;/h3&gt;

&lt;p&gt;To add an image in excel we need to add &lt;code&gt;base64&lt;/code&gt; of an image. I have saved the &lt;code&gt;base64&lt;/code&gt; of logo image in a separate file called &lt;code&gt;carlogo.js&lt;/code&gt; as below.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export const logoBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAFKCAMAAADcyF29AAABxVBMVEVHcEwJCAggFxEBAQE2KyQAAAA0LScAAAAAAAA1LysXEQ0EBAQFBAMDAwMLCQgGBQUFBAOEQhUHBwZjQSuScFoVFRZvNAx5NghcOyaudU8yMDBrNhOiViMZFhXEdD3Ef0+4ZzFISUdSJwliMA6BPA6lVR8CAgEDAgQPDhANDgsKCQoVFhPObi4SERS2VxcE.......";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To use it in &lt;code&gt;generateExcel()&lt;/code&gt; method, We need to import &lt;code&gt;carlogo.js&lt;/code&gt; in &lt;code&gt;excel.service.ts&lt;/code&gt; as below,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import * as logoFile from './carlogo.js';&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, add an image in a worksheet as below,&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;logo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;workbook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addImage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;logoFile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;logoBase64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;extension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;E1:F3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;workbook.addImage(image)&lt;/code&gt; creates an image object and returns the image id, that image id we will use to place image in the worksheet using &lt;code&gt;worksheet.addImage(imageId, cellRange)&lt;/code&gt;. The coordinates calculated from the range will cover from the top-left of the first cell to the bottom right of the second.&lt;/p&gt;

&lt;h3&gt;
  
  
  Merge Cells
&lt;/h3&gt;

&lt;p&gt;We can merge cells using &lt;code&gt;worklist.mergeCells(cellRange)&lt;/code&gt; method, as below,&lt;br&gt;
&lt;code&gt;worksheet.mergeCells('A1:D2');&lt;/code&gt;&lt;br&gt;
The coordinates calculated from the range will cover from the top-left of the first cell to the bottom right of the second.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Data with Header &amp;amp; Conditional Formatting
&lt;/h3&gt;

&lt;p&gt;We will add a header row for car data records with a background color, as below,&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;//Add Header Row&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;headerRow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Cell Style : Fill and Border&lt;/span&gt;
&lt;span class="nx"&gt;headerRow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eachCell&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;cell&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;cell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pattern&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;solid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fgColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;argb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FFFFFF00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;bgColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;argb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FF0000FF&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;cell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;border&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;thin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;thin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;thin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;thin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;ExcelJS directly doesn’t support conditional formatting, but we can achieve this functionality by assigning style based on required condition in angular, as below,&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// Add Data and Conditional Formatting&lt;/span&gt;
&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getCell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FF99FF99&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FF9999&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pattern&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;solid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fgColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;argb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Same way, you can add other rows like footer and additional information.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Export Excel file using FileSaver
&lt;/h3&gt;

&lt;p&gt;Now our workbook is ready to export. We can export it using &lt;code&gt;saveFile()&lt;/code&gt; method of file-saver, as shown below&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;workbook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;xlsx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeBuffer&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;blob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Blob&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;saveAs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CarData.xlsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Great!!!👍👍👍 You have exported the excel file in Angular&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Checkout Original Article and GitHub Repository
&lt;/h2&gt;




&lt;p&gt;Read my original article 📰 &lt;a href="https://www.ngdevelop.tech/export-to-excel-in-angular-6/" rel="noopener noreferrer"&gt;Export to Excel in Angular using ExcelJS&lt;/a&gt; for a detailed and step-by-step explanation to generate excel file in each angular version.&lt;/p&gt;

&lt;p&gt;GitHub Repository 📝 &lt;a href="https://github.com/ngdevelop-tech/angular-6-export-an-excel-file" rel="noopener noreferrer"&gt;angular-export-an-excel-file&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I hope you like this article. Please provide your valuable comments, feedback, and suggestions.&lt;/p&gt;

&lt;p&gt;If you like the project please mark the ⭐ in the Github repository.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Keep Learning, Keep Sharing 🙂&lt;/p&gt;

</description>
      <category>angular</category>
      <category>javascript</category>
      <category>exceljs</category>
    </item>
    <item>
      <title>Angular Export to PDF using PDFMake (Client-Side PDF Generation)</title>
      <dc:creator>Ankit Prajapati</dc:creator>
      <pubDate>Sun, 06 Oct 2019 18:27:32 +0000</pubDate>
      <link>https://forem.com/ankitprajapati/angular-export-to-pdf-using-pdfmake-client-side-pdf-generation-1jlk</link>
      <guid>https://forem.com/ankitprajapati/angular-export-to-pdf-using-pdfmake-client-side-pdf-generation-1jlk</guid>
      <description>&lt;p&gt;Generating PDF for reports, forms, invoices, and other data is a common use case for any web application.&lt;/p&gt;

&lt;p&gt;Generating PDF at client side can be very helpful. We can format and design pdf as per our requirement without using any external tool.&lt;/p&gt;

&lt;p&gt;The following are the two popular open-source javascript libraries available for client-side pdf generation. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://pdfmake.org/#/" rel="noopener noreferrer"&gt;PDFMake&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/jspdf" rel="noopener noreferrer"&gt;jsPDF&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, you will see how to export a pdf file in angular 8 using pdfmake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find the complete article with an online resume builder demo application at &lt;a href="https://www.ngdevelop.tech/blog/" rel="noopener noreferrer"&gt;NgDevelop Blog&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check out the original article 📰 &lt;a href="https://www.ngdevelop.tech/angular-8-export-to-pdf-using-pdfmake/" rel="noopener noreferrer"&gt;Angular Export to PDF using PDFMake (Client-Side PDF Generation)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repository: 📝 &lt;a href="https://github.com/ngdevelop-tech/angular-8-export-pdf" rel="noopener noreferrer"&gt;https://github.com/ngdevelop-tech/angular-8-export-pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Application 🚀 : &lt;a href="https://online-resume-builder.netlify.com/" rel="noopener noreferrer"&gt;https://online-resume-builder.netlify.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2019%2F08%2Fangular-export-to-pdf-pdfmake.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.ngdevelop.tech%2Fwp-content%2Fuploads%2F2019%2F08%2Fangular-export-to-pdf-pdfmake.gif" title="Online Resume Builder using Angular and PDFMake" alt="Angular export to PDF using PDFMake | Online Resume Builder"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PDFMake&lt;/strong&gt; is very popular client-side and server-side pdf generation javascript library. It has 100,000+ weekly downloads from npm. And 7K+ GitHub stars. &lt;/p&gt;

&lt;p&gt;It is easy to use and provides all required features for pdf design and formatting with some extraordinary features like QR Code, Table of contents and Helper methods for Opening pdf, download pdf, and pdf printing. &lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Setup and PDF Generation
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Create a Angular Project
&lt;/h4&gt;

&lt;p&gt;Use the below command to create a new Angular project with Angular CLI.&lt;br&gt;
&lt;strong&gt;&lt;code&gt;ng new online-resume-builder&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Install PDFMake Library
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;npm install --save pdfmake&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Import pdfmake and vfs_fonts
&lt;/h4&gt;

&lt;p&gt;To begin in browser with the default configuration, we should include two files &lt;code&gt;Pdfmake.js&lt;/code&gt; and &lt;code&gt;vfs_fonts.js&lt;/code&gt;. When you install Pdfmake from npm it comes with the both file.&lt;/p&gt;

&lt;p&gt;Now to use this files in angular component or service add below import statement on top of component/service&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;pdfMake&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pdfmake/build/pdfmake&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;pdfFonts&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pdfmake/build/vfs_fonts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;pdfMake&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vfs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pdfFonts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pdfMake&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vfs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Generate single line text pdf for testing our environment setup
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;PDFMake follows a declarative approach. It basically means, you’ll never have to calculate positions manually or use commands like &lt;code&gt;writeText(text, x, y)&lt;/code&gt;, &lt;code&gt;moveDown&lt;/code&gt; etc…, as you would with a lot of other libraries. The most fundamental concept to be mastered is the document-definition-object which can be as simple as:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All the pdf formatting and design configuration are written in &lt;strong&gt;document-definition-object&lt;/strong&gt;. As shown below :&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nf"&gt;generatePdf&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentDefinition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;This is an sample PDF printed with pdfMake&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nx"&gt;pdfmake&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createPdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;documentDefinition&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;(click)=&lt;/span&gt;&lt;span class="s"&gt;"generatePdf()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Open PDF&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Add &lt;code&gt;Open PDF&lt;/code&gt; button  on &lt;code&gt;app.component.html&lt;/code&gt; and call &lt;code&gt;generatePdf()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Serve your application and test. This will show pdf as below : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2F_6wDbymP5twhdkpeNnWRbpNzuL2R37LhqUwBqY512lUXS89VmUNME1a0jCpZErEhbInXgHsb-qJH_hQr5IhcvReToGNw4W_YUQDWRg-sMqF5_mbyvK2w2AfiHnC3z28uaj0m7KoR" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2F_6wDbymP5twhdkpeNnWRbpNzuL2R37LhqUwBqY512lUXS89VmUNME1a0jCpZErEhbInXgHsb-qJH_hQr5IhcvReToGNw4W_YUQDWRg-sMqF5_mbyvK2w2AfiHnC3z28uaj0m7KoR" title="PDF Generated using PDFMake" alt="PDF Generated using PDFMake"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PDFMake comes with inbuilt methods :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the PDF : &lt;code&gt;pdfMake.createPdf(docDefinition).download();&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open the PDF in new window : &lt;code&gt;pdfMake.createPdf(docDefinition).open();&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Open PDF in same window : &lt;code&gt;pdfMake.createPdf(docDefinition).open({}, window);&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Print the PDF: &lt;code&gt;pdfMake.createPdf(docDefinition).print();&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PDFMake also provides methods for :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put the PDF into your own page as URL data&lt;/li&gt;
&lt;li&gt;Get the PDF as base64 data&lt;/li&gt;
&lt;li&gt;Get the PDF as a buffer&lt;/li&gt;
&lt;li&gt;Get the PDF as Blob&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Refer &lt;a href="https://pdfmake.github.io/docs/getting-started/client-side/methods/" rel="noopener noreferrer"&gt;here&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Online Resume Builder using Angular and PDFMake
&lt;/h2&gt;

&lt;p&gt;Read my &lt;a href="https://www.ngdevelop.tech/angular-8-export-to-pdf-using-pdfmake/" rel="noopener noreferrer"&gt;original article&lt;/a&gt; 📰 for a detailed and step-by-step explanation to create an Online resume builder application using Angular and PDFMake.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I hope you like this article. Please provide your valuable comments, feedback, and suggestions.&lt;/p&gt;

&lt;p&gt;If you like the project please mark the ⭐ in the &lt;a href="https://github.com/ngdevelop-tech/angular-8-export-pdf" rel="noopener noreferrer"&gt;Github repository&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Keep Learning, Keep Sharing 🙂&lt;/p&gt;

</description>
      <category>angular</category>
      <category>pdfmake</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
