<?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: Juz_Bhargil</title>
    <description>The latest articles on Forem by Juz_Bhargil (@bhargil).</description>
    <link>https://forem.com/bhargil</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%2F339487%2F7d1f6008-150d-4a5e-938d-81e007dcf8d5.png</url>
      <title>Forem: Juz_Bhargil</title>
      <link>https://forem.com/bhargil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bhargil"/>
    <language>en</language>
    <item>
      <title>How to integrate polotno in Angular framework?</title>
      <dc:creator>Juz_Bhargil</dc:creator>
      <pubDate>Mon, 06 Jun 2022 15:02:51 +0000</pubDate>
      <link>https://forem.com/bhargil/how-to-integrate-polotno-in-angular-framework-2lmg</link>
      <guid>https://forem.com/bhargil/how-to-integrate-polotno-in-angular-framework-2lmg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What is Polotno?&lt;/strong&gt;&lt;br&gt;
Polotno is a fantastic design editing application that allows users to engage with and build any template. (for custom as well as social media post)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Polotno?&lt;/strong&gt;&lt;br&gt;
Polotno is an opinionated JavaScript library and React components to build canvas editors for several business use cases. It is a canvas editor tool using &lt;a href="https://konvajs.org"&gt;konvajs.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Statement:&lt;/strong&gt;&lt;br&gt;
However, Polotno is only available in React components; if you want to integrate this library in the Angular framework, there are many obstacles in embedding React and extending all functionalities in Angular, but here is a step-by-step guide to help you understand.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Create a new Angular Project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;ng new polotno-js-sample&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install these packages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;npm install polotno --save&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install react@17.0.2 --save&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install react-dom@17.0.2 --save&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add this code in your &lt;strong&gt;app.component.html&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;&amp;lt;div id="root"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new folder &lt;strong&gt;polotno-js&lt;/strong&gt; inside app folder and create a new file &lt;strong&gt;app.tsx&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy this code in &lt;strong&gt;app.tsx&lt;/strong&gt; file&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { PolotnoContainer, SidePanelWrap, WorkspaceWrap } from "polotno";
import { Toolbar } from "polotno/toolbar/toolbar";
import { ZoomButtons } from "polotno/toolbar/zoom-buttons";
import { SidePanel } from "polotno/side-panel";
import { Workspace } from "polotno/canvas/workspace";
import * as React from "react";
import createStore from "polotno/model/store";
import styled from "polotno/utils/styled";
import {
  Button,
  Navbar,
  Alignment,
  Divider,
  Position,
  Menu,
  HTMLSelect,
  Slider,
} from "@blueprintjs/core";
import { observer } from "mobx-react-lite";
import { Popover2 } from "@blueprintjs/popover2";
import * as unit from "polotno/utils/unit";
import { t } from "polotno/utils/l10n";
import { downloadFile } from "polotno/utils/download";

const store = createStore({ key: "pVgGIyr19cAD0U8Z0OD1", showCredit: false });
const page = store.addPage();
page.addElement({
  x: 50,
  y: 50,
});
const NavbarContainer = styled("div")`
  @media screen and (max-width: 500px) {
    overflow-x: auto;
    overflow-y: hidden;
    max-width: 100vw;
  }
`;

const NavInner = styled("div")`
  @media screen and (max-width: 500px) {
    display: flex;
  }
`;
function getName() {
  var text = "";
  var possible =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  for (var i = 0; i &amp;lt; 10; i++) {
    text += possible.charAt(Math.floor(Math.random() * possible.length));
  }
  return text;
}
const DownloadButton = observer(() =&amp;gt; {
  const [saving, setSaving] = React.useState(false);
  const [quality, setQuality] = React.useState(1);
  const [type, setType] = React.useState("jpeg");

  return (
    &amp;lt;Popover2
      content={
        &amp;lt;Menu&amp;gt;
          &amp;lt;li className="bp4-menu-header"&amp;gt;
            &amp;lt;h6 className="bp4-heading"&amp;gt;File type&amp;lt;/h6&amp;gt;
          &amp;lt;/li&amp;gt;
          &amp;lt;HTMLSelect
            fill
            onChange={(e) =&amp;gt; {
              setType(e.target.value);
              setQuality(1);
            }}
            value={type}
          &amp;gt;
            &amp;lt;option value="jpeg"&amp;gt;JPEG&amp;lt;/option&amp;gt;
            &amp;lt;option value="png"&amp;gt;PNG&amp;lt;/option&amp;gt;
            &amp;lt;option value="pdf"&amp;gt;PDF&amp;lt;/option&amp;gt;
          &amp;lt;/HTMLSelect&amp;gt;
          &amp;lt;li className="bp4-menu-header"&amp;gt;
            &amp;lt;h6 className="bp4-heading"&amp;gt;Size&amp;lt;/h6&amp;gt;
          &amp;lt;/li&amp;gt;
          &amp;lt;div style={{ padding: "10px" }}&amp;gt;
            &amp;lt;Slider
              value={quality}
              labelRenderer={false}
              // labelStepSize={0.4}
              onChange={(quality) =&amp;gt; {
                setQuality(quality);
              }}
              stepSize={0.2}
              min={0.2}
              max={3}
              showTrackFill={false}
            /&amp;gt;
            {type === "pdf" &amp;amp;&amp;amp; (
              &amp;lt;div&amp;gt;
                {unit.pxToUnitRounded({
                  px: store.width,
                  dpi: store.dpi / quality,
                  precious: 0,
                  unit: "mm",
                })}{" "}
                x{" "}
                {unit.pxToUnitRounded({
                  px: store.height,
                  dpi: store.dpi / quality,
                  precious: 0,
                  unit: "mm",
                })}{" "}
                mm
              &amp;lt;/div&amp;gt;
            )}
            {type !== "pdf" &amp;amp;&amp;amp; (
              &amp;lt;div&amp;gt;
                {Math.round(store.width * quality)} x{" "}
                {Math.round(store.height * quality)} px
              &amp;lt;/div&amp;gt;
            )}
          &amp;lt;/div&amp;gt;
          &amp;lt;Button
            fill
            intent="primary"
            loading={saving}
            onClick={async () =&amp;gt; {
              if (type === "pdf") {
                setSaving(true);
                await store.saveAsPDF({
                  fileName: getName() + ".pdf",
                  dpi: store.dpi / quality,
                  pixelRatio: 2 * quality,
                });
                setSaving(false);
              } else {
                store.pages.forEach((page, index) =&amp;gt; {
                  // do not add index if we have just one page
                  const indexString =
                    store.pages.length &amp;gt; 1 ? "-" + (index + 1) : "";
                  store.saveAsImage({
                    pageId: page.id,
                    pixelRatio: quality,
                    mimeType: "image/" + type,
                    fileName: getName() + indexString + "." + type,
                  });
                });
              }
            }}
          &amp;gt;
            Download {type.toUpperCase()}
          &amp;lt;/Button&amp;gt;
        &amp;lt;/Menu&amp;gt;
      }
      position={Position.BOTTOM_RIGHT}
    &amp;gt;
      &amp;lt;Button
        icon="import"
        text={t("toolbar.download")}
        intent="primary"
        loading={saving}
        onClick={() =&amp;gt; {
          setQuality(1);
        }}
      /&amp;gt;
    &amp;lt;/Popover2&amp;gt;
  );
});
export const App = () =&amp;gt; {
  const [show, setShow] = React.useState(false);
  const [saving, setSaving] = React.useState(false);

  return (
    &amp;lt;div className="bp4-light"&amp;gt;
      &amp;lt;NavbarContainer className="bp4-navbar"&amp;gt;
        &amp;lt;NavInner&amp;gt;
          &amp;lt;Navbar.Group align={Alignment.LEFT}&amp;gt;
            &amp;lt;Button
              icon="new-object"
              minimal
              onClick={() =&amp;gt; {
                const ids = store.pages
                  .map((page) =&amp;gt; page.children.map((child) =&amp;gt; child.id))
                  .flat();
                const hasObjects = ids?.length;
                if (hasObjects) {
                  if (!window.confirm("Remove all content for a new design?")) {
                    return;
                  }
                  const pagesIds = store.pages.map((p) =&amp;gt; p.id);
                  store.deletePages(pagesIds);
                  store.addPage();
                }
              }}
            &amp;gt;
              New
            &amp;lt;/Button&amp;gt;
            &amp;lt;Button
              icon="floppy-disk"
              minimal
              loading={saving}
              onClick={async () =&amp;gt; {
                const json = store.toJSON();
                setSaving(true);
                const url =
                  "data:text/json;base64," +
                  window.btoa(
                    unescape(encodeURIComponent(JSON.stringify(json)))
                  );

                downloadFile(url, "polotno.json");
              }}
            &amp;gt;
              Save My Design
            &amp;lt;/Button&amp;gt;
          &amp;lt;/Navbar.Group&amp;gt;
          &amp;lt;Navbar.Group align={Alignment.RIGHT}&amp;gt;
            &amp;lt;Divider /&amp;gt;
            &amp;lt;DownloadButton /&amp;gt;
            &amp;lt;Divider /&amp;gt;
          &amp;lt;/Navbar.Group&amp;gt;
        &amp;lt;/NavInner&amp;gt;
      &amp;lt;/NavbarContainer&amp;gt;
      &amp;lt;PolotnoContainer
        style={{ height: "90vh" }}
        className="polotno-app-container"
      &amp;gt;
        {" "}
        &amp;lt;SidePanelWrap&amp;gt;
          &amp;lt;SidePanel store={store} /&amp;gt;
        &amp;lt;/SidePanelWrap&amp;gt;
        &amp;lt;WorkspaceWrap&amp;gt;
          &amp;lt;Toolbar store={store} /&amp;gt;
          &amp;lt;Workspace store={store} /&amp;gt;
          &amp;lt;ZoomButtons store={store} /&amp;gt;
        &amp;lt;/WorkspaceWrap&amp;gt;
      &amp;lt;/PolotnoContainer&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now just Add this code in your &lt;strong&gt;app.component.ts&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import * as ReactDOM from 'react-dom';
import * as React from 'react';
import { App } from './polotno-js/app';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit, AfterViewInit{
  title = 'polotno-js';
  ngOnInit(): void {}

  public ngOnChanges() {
    this.renderComponent();
  }

  public ngAfterViewInit() {
    this.renderComponent();
  }

  private renderComponent() {
       ReactDOM.render(
        React.createElement(App) 
      ,document.getElementById('root')
      );
  }
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now change some setting in your &lt;strong&gt;tsconfig.ts&lt;/strong&gt; file inside &lt;strong&gt;compilerOptions&lt;/strong&gt; object
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    "jsx": "react",
    "skipLibCheck": true,
    "noImplicitAny": true,
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Put some polotno default css in &lt;strong&gt;index.html&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;link href="https://unpkg.com/@blueprintjs/icons@4/lib/css/blueprint-icons.css" rel="stylesheet"/&amp;gt;
&amp;lt;link href="https://unpkg.com/@blueprintjs/core@4/lib/css/blueprint.css"
      rel="stylesheet"/&amp;gt;

&amp;lt;link href="https://unpkg.com/@blueprintjs/popover2@1/lib/css/blueprint-popover2.css" rel="stylesheet"/&amp;gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now run your project using &lt;strong&gt;&lt;code&gt;npm start&lt;/code&gt;&lt;/strong&gt; and Open your browser and run &lt;strong&gt;&lt;code&gt;localhost:4200&lt;/code&gt;&lt;/strong&gt; and see the magic
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H7riKi7t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/67xl9s28lhggreb8in22.png" alt="Image description" width="880" height="428"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Test with &lt;a href="https://codesandbox.io/s/bj-polotno-angular-10wx3x"&gt;&lt;strong&gt;codesendbox&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Over To You! &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Looking for a Sample Source Code? Here you go: &lt;a href="https://tinyurl.com/e4n5ddev"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>angular</category>
      <category>designeditor</category>
      <category>canvas</category>
      <category>polotno</category>
    </item>
    <item>
      <title>Angular: How to Create Subscribe Custom Alert Services</title>
      <dc:creator>Juz_Bhargil</dc:creator>
      <pubDate>Fri, 08 May 2020 15:15:12 +0000</pubDate>
      <link>https://forem.com/samarpaninfotech/angular-how-to-create-subscribe-custom-alert-services-3bb3</link>
      <guid>https://forem.com/samarpaninfotech/angular-how-to-create-subscribe-custom-alert-services-3bb3</guid>
      <description>&lt;p&gt;In this article we’ll learn how we can create subscribe based custom alert services using Angular 8.&lt;/p&gt;

&lt;h2&gt;
&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Prior knowledge of &lt;a rel="noreferrer noopener" href="https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html"&gt;typescript&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Prior knowledge of &lt;a href="https://www.w3schools.com/js/" rel="noreferrer noopener"&gt;JavaScript&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Prior knowledge of HTML &amp;amp; CSS.&lt;/li&gt;
&lt;li&gt;Visual studio code.&lt;/li&gt;
&lt;li&gt;A development machine with &lt;strong&gt;Node 8.9+ &amp;amp; NPM 5.5.1+&lt;/strong&gt; installed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step-by-step tutorial of Creating Subscribe Alert Services using Angular&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;strong&gt;Step 1: Installing Angular CLI 8&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;First step, where we’ll have to install latest version of Angular CLI&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ npm install -g @angular/cli&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;
&lt;strong&gt;Step 2: Creating your Angular 8 Project&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this second step, we will use Angular CLI to start our Angular Project &lt;/p&gt;

&lt;p&gt;Go to CMD or Terminal and use this command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ng new custom-loader&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This CLI will ask you “whether you would like to add Angular routing” Say &lt;strong&gt;Yes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It will ask “which stylesheet format you would like to use”. Choose &lt;strong&gt;CSS.&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now your project is ready Angular CLI will generate required files and folders along with NPM packages and routing too.&lt;/p&gt;

&lt;p&gt;After that open your project in Visual studio code and go to your root folder and run the local development server using below command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ npm start&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dHn8E5FD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/angular-8-project-1024x363.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dHn8E5FD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/angular-8-project-1024x363.png" alt="step of creating project in angular 8 " width="880" height="312"&gt;&lt;/a&gt;step of creating project in angular 8&lt;/p&gt;

&lt;p&gt;Now&lt;em&gt; run localhost:4200/&lt;/em&gt; in your browser&lt;/p&gt;

&lt;h2&gt;Step 3: Add services as Alert.services&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;$ ng generate services alert&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Step 4: Add new component as Alert&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;$ ng generate component alert&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Step 5: Add below codes into it&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;
&lt;strong&gt;Add below code in alert.component.html&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/li&gt;&lt;/ul&gt;





&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sr8De2JM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/alert_component_html-code-1024x262.png" alt="" width="880" height="225"&gt;





&lt;ul&gt;&lt;li&gt;Add below code in alert.component.ts&lt;/li&gt;&lt;/ul&gt;





&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QZZ1wG2X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/alert_component_ts-code-1024x598.png" alt="" width="880" height="514"&gt;





&lt;ul&gt;&lt;li&gt;Add below css code into alert.component.css&lt;/li&gt;&lt;/ul&gt;





&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3OFxzQTI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/alert_component_css-code-1024x322.png" alt="" width="880" height="277"&gt;





&lt;h2&gt;Step 6: How to use this services?&lt;/h2&gt;





&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Add below code in your appropriate component.html page whenever you want to use&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;





&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N36htFDb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/component_html-page-code.png" alt="" width="880" height="112"&gt;





&lt;p&gt;Now check how to use this services&lt;/p&gt;





&lt;ul&gt;&lt;li&gt;For success message:&lt;/li&gt;&lt;/ul&gt;





&lt;pre&gt;&lt;code&gt;this.alertService.success("Yeah !!!! You got message successfully");&lt;/code&gt;&lt;/pre&gt;





&lt;ul&gt;&lt;li&gt;For warning message:&lt;/li&gt;&lt;/ul&gt;





&lt;pre&gt;&lt;code&gt;this.alertService.warning("Oh !!!! Plz check double");&lt;/code&gt;&lt;/pre&gt;





&lt;ul&gt;&lt;li&gt;For error message: &lt;/li&gt;&lt;/ul&gt;





&lt;pre&gt;&lt;code&gt; this.alertService.error("Ooopss !!!! Something went wrong");&lt;/code&gt;&lt;/pre&gt;





&lt;ul&gt;&lt;li&gt;For informative message: &lt;/li&gt;&lt;/ul&gt;





&lt;pre&gt;&lt;code&gt;this.alertService.info("Yepp !!! This is a important information");&lt;/code&gt;&lt;/pre&gt;





&lt;ul&gt;&lt;li&gt;How to clear message?&lt;/li&gt;&lt;/ul&gt;





&lt;pre&gt;&lt;code&gt;this.alertService.clearAlertMessage();&lt;/code&gt;&lt;/pre&gt;





&lt;p&gt;I have used services something like below&lt;/p&gt;





&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s898hLMR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/service-1024x641.png" alt="" width="880" height="551"&gt;





&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W9nbDuB0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://www.samarpaninfotech.com/wp-content/uploads/2020/01/CustomAlertServices.gif" alt="GIF Animation of  Custom Alert Services" width="880" height="481"&gt;GIF Animation of  Custom Alert Services





&lt;h3&gt;
&lt;strong&gt;Over to You!&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;/h3&gt;





&lt;p&gt;&lt;em&gt;&lt;strong&gt;Looking for a Sample Source Code?&lt;/strong&gt;&lt;/em&gt; Here you go: &lt;a href="https://github.com/sandipmalaviya07/custom-alert-services" rel="noreferrer noopener"&gt;GITHUB&lt;/a&gt;.&lt;/p&gt;





&lt;p&gt;Today you have learn how to create custom dynamic loader on HTML Element using Angular 8. If you have queries about tutorial, please ask our &lt;a href="https://www.samarpaninfotech.com/hire-angularjs-developers/" rel="noreferrer noopener"&gt;Angular Developers&lt;/a&gt; via GitHub Profile. OR Put your Comment Below&lt;/p&gt;





&lt;p&gt;That’s it for now. Stay Connected for more tutorials, until then Happy Coding…&lt;/p&gt;





&lt;h2&gt;Related Development Resources&lt;/h2&gt;





&lt;ul&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" href="https://dev.to/samarpaninfotech/angular-ie-error-uncaught-in-promise-loading-chunk-3pa"&gt;Solution for Angular IE Error: Uncaught (in promise) Loading chunk.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" href="https://dev.to/samarpaninfotech/angular-create-custom-dynamic-loader-or-spinner-on-html-element-2f3c"&gt;Angular: Create Custom Dynamic Loader OR Spinner on HTML Element&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>html</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
