<?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>DEV Community: MoZardi</title>
    <description>The latest articles on DEV Community by MoZardi (@moxardi).</description>
    <link>https://dev.to/moxardi</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%2F87859%2Ff2f7d3c4-281b-49d6-9f6b-230445989aea.png</url>
      <title>DEV Community: MoZardi</title>
      <link>https://dev.to/moxardi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moxardi"/>
    <language>en</language>
    <item>
      <title>Local Web Vue Component</title>
      <dc:creator>MoZardi</dc:creator>
      <pubDate>Sun, 30 Dec 2018 20:50:41 +0000</pubDate>
      <link>https://dev.to/moxardi/local-web-vue-component--10o2</link>
      <guid>https://dev.to/moxardi/local-web-vue-component--10o2</guid>
      <description>&lt;h2&gt;
  
  
  Components in Vue
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.amazonaws.com%2Fcoursetro%2Fposts%2F134-full.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.amazonaws.com%2Fcoursetro%2Fposts%2F134-full.png" alt="alt text" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web components&lt;/strong&gt; in web applications are &lt;strong&gt;blocks&lt;/strong&gt; (tiny reusable chunks) that encapsulate markup, HTML template, CSS, and Javascript. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Vue.JS web components&lt;/em&gt;&lt;/strong&gt; are just re-usable piece of code or template that we can use in different vue instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Vue.JS Web components&lt;/em&gt;&lt;/strong&gt; are custom HTML elements that can be used and reused in web apps and web pages.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Actually not just local component but also global component.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I will show you how we can create or register components globally and locally, as well as how to nest them in other components.&lt;/p&gt;

&lt;p&gt;For large-scale applications, we split our code up into different components and then just use those components to show them to browser when we need them. &lt;/p&gt;

&lt;p&gt;For instance :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vue Web Component Tree&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F4j3Yb9L%2Fnesting-component.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F4j3Yb9L%2Fnesting-component.png" alt="Nesting Components" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have 3 components which are &lt;em&gt;Header&lt;/em&gt;, &lt;em&gt;Article&lt;/em&gt; and &lt;em&gt;Footer&lt;/em&gt; components.&lt;/p&gt;

&lt;p&gt;So, We can nest those three components in the root component , likewise  we could also have a &lt;em&gt;Login&lt;/em&gt; component, &lt;em&gt;Side Nav&lt;/em&gt; component and &lt;em&gt;Toast&lt;/em&gt; component and then nest those in the &lt;em&gt;Header&lt;/em&gt; component.  &lt;/p&gt;

&lt;p&gt;Also, we have three child components which are &lt;em&gt;Carousel&lt;/em&gt; component, &lt;em&gt;Card&lt;/em&gt; component and &lt;em&gt;Form&lt;/em&gt; component , and then nest those in the parent component which is &lt;em&gt;Article&lt;/em&gt; component. &lt;/p&gt;

&lt;p&gt;Last component, we can nest &lt;em&gt;Link&lt;/em&gt; component to the &lt;em&gt;Footer&lt;/em&gt; component.&lt;/p&gt;

&lt;p&gt;So, Why would we do different vue web component ?&lt;/p&gt;

&lt;p&gt;Well, Imagine we have an article component which is used in different sections of the website, so rather than code that maybe four or five times in different areas of the website which is code it only once in its own component and then nest it four or five times whatever it's needed.&lt;/p&gt;

&lt;p&gt;Example : &lt;/p&gt;

&lt;h4&gt;
  
  
  Global vue web component
&lt;/h4&gt;

&lt;p&gt;Let's use the Vue-CLI which is the Standard Tooling for Vue.js Development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cli.vuejs.org" rel="noopener noreferrer"&gt;Vue CLI version 3 &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create a new vue web component file called  &lt;em&gt;fruit.vue&lt;/em&gt;&lt;br&gt;
So, Inside the &lt;em&gt;script&lt;/em&gt; tag we create an array of items (array of strings) and called &lt;em&gt;fruits&lt;/em&gt; , thus has a data set called &lt;em&gt;fruits&lt;/em&gt; . &lt;/p&gt;

&lt;p&gt;Inside &lt;em&gt;template&lt;/em&gt; tag we create an unordered list which is use the &lt;strong&gt;v-for&lt;/strong&gt; directive for iterating over an array as a list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt; fruit.vue file 

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

  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;v-for=&lt;/span&gt;&lt;span class="s"&gt;"fruit in fruits"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;  {{ fruit }} &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

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

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="nf"&gt;data &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;fruits&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;Apple&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;Orange&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;Avocado&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;Coconut&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;Kiwi&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;Mango&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="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;style&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Note that : &lt;strong&gt;v-for&lt;/strong&gt; directive used to render list of data/content to the user or looping over data sets. &lt;/p&gt;

&lt;p&gt;After we created the vue web component file, we must go to the main.js file to register the global vue web component.&lt;/p&gt;

&lt;p&gt;So, Inside the main.js file do the following : &lt;br&gt;
First of all, Import the Vue web component file that you have created.&lt;br&gt;
Then, Register the Vue web componet as globally.&lt;br&gt;
Lastly, Now you can use it or nest it in any other Vue web component or in the root component.&lt;br&gt;
&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;// main.js file&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Vue&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;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&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.vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;// Import the Vue web component file&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Fruits&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./components/fruit.vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="c1"&gt;// Register global component &lt;/span&gt;
&lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fruits&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Fruits&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;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;App/&amp;gt;&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;Right now we have successfully registered the componet (fruit.vue) globally. &lt;/p&gt;

&lt;p&gt;So, we can nest the component (fruit.vue) in the root component (App.vue) after we registered in the main.js file. &lt;/p&gt;

&lt;p&gt;So, Go to the root component which is App.vue file, and insert the global vue web component as custom tag.&lt;br&gt;
&lt;/p&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;template&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- insert the fruit tag that represent the global vue web component --&amp;gt;&lt;/span&gt;     
    &lt;span class="nt"&gt;&amp;lt;fruits&amp;gt;&amp;lt;/fruits&amp;gt;&lt;/span&gt;

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

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

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&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;App&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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

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

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


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

&lt;/div&gt;



&lt;p&gt;So, the result will be listing the fruits as globally component &lt;strong&gt;with CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple&lt;/li&gt;
&lt;li&gt;Orange&lt;/li&gt;
&lt;li&gt;Avocado&lt;/li&gt;
&lt;li&gt;Coconut&lt;/li&gt;
&lt;li&gt;Kiwi&lt;/li&gt;
&lt;li&gt;Mango&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same example of global vue web component without using the Vue-cli :&lt;br&gt;
&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;// define component variable &lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;fruitComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;fruits&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;Apple&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;Orange&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;Avocado&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;Coconut&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;Kiwi&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;Mango&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="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;ul&amp;gt;
    &amp;lt;li v-for="fruit in fruits"&amp;gt;{{ fruit }}&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt; 
    `&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// register global component&lt;/span&gt;
&lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fruits&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fruitComponent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// create a root instances &lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;app&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;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#vue-app&lt;/span&gt;&lt;span class="dl"&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;app2&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;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#vue-app2&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;Note that we have 2 vue instances, so the global vue web component we can use it in any scope of vue instances. &lt;/p&gt;

&lt;p&gt;Note that Any global vue component we registered outside any vue instances to be used in any vue instances scope.  &lt;/p&gt;

&lt;p&gt;Used the component name as tag inside template of vue scope&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="c"&gt;&amp;lt;!-- Scope of the first vue instance with id equal to vue-app --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

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

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


&lt;span class="c"&gt;&amp;lt;!-- Scope of the second vue instance with id equal to vue-app2 --&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

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

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

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

&lt;/div&gt;



&lt;p&gt;The result : The global vue component will be work in each of scope of vue instances. &lt;/p&gt;

&lt;p&gt;So, When we register a component globally, we can use it in any vue instance, but if we register it locally, we can use it just in specific vue instance. &lt;/p&gt;

&lt;p&gt;So, the result will be listing the fruits as globally component &lt;strong&gt;without CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple&lt;/li&gt;
&lt;li&gt;Orange&lt;/li&gt;
&lt;li&gt;Avocado&lt;/li&gt;
&lt;li&gt;Coconut&lt;/li&gt;
&lt;li&gt;Kiwi&lt;/li&gt;
&lt;li&gt;Mango
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example : &lt;/p&gt;

&lt;h4&gt;
  
  
  Local vue web component
&lt;/h4&gt;

&lt;p&gt;Let's use the Vue-CLI to create a local vue web component.&lt;/p&gt;

&lt;p&gt;So, Let's create a vue web component file called  &lt;em&gt;fruit.vue&lt;/em&gt; as done before.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt; fruit.vue file 

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

  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;v-for=&lt;/span&gt;&lt;span class="s"&gt;"fruit in fruits"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;  {{ fruit }} &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

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

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="nf"&gt;data &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;fruits&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;Apple&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;Orange&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;Avocado&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;Coconut&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;Kiwi&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;Mango&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="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;style&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;So, after we created the vue web component file, we don't need to go to the main.js file to register the vue web component, because we don't register it globally.&lt;/p&gt;

&lt;p&gt;So, Inside any other Vue web component file do the following : &lt;br&gt;
First of all, Again import the Vue web component file that you have created.&lt;br&gt;
Then, Register the Vue web componet as locally via use &lt;strong&gt;components: { }&lt;/strong&gt; option inside Export default object .&lt;br&gt;
Lastly, Now you can use it or nest it in the component that we registered it locally.&lt;/p&gt;

&lt;p&gt;Note that inside the Export default object we use the option called components as follows :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt; components: {
    ComponentName : ImportingName  
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's go to the root component which is App.vue file, and register the local vue web component.&lt;br&gt;
&lt;/p&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;template&amp;gt;&lt;/span&gt;

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

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

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

&lt;span class="c1"&gt;//Import the Vue web component file &lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Fruits&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./components/fruit.vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="c1"&gt;// Register the local component inside components option &lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&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;App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;components&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;fruits&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Fruits&lt;/span&gt;
  &lt;span class="p"&gt;}&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;style&amp;gt;&lt;/span&gt;

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


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

&lt;/div&gt;



&lt;p&gt;Note that in local component we can use that component in only the root component &lt;em&gt;App.vue&lt;/em&gt; file because we registerd as locally, Any other component cannot use it. &lt;/p&gt;

&lt;p&gt;So, the result will be listing the fruits as locally component &lt;strong&gt;with CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple&lt;/li&gt;
&lt;li&gt;Orange&lt;/li&gt;
&lt;li&gt;Avocado&lt;/li&gt;
&lt;li&gt;Coconut&lt;/li&gt;
&lt;li&gt;Kiwi&lt;/li&gt;
&lt;li&gt;Mango&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, Let's create same example of local vue web component, but without using the Vue-cli :&lt;br&gt;
&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;// define component variable &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fruity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;fruits&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;Apple&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;Orange&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;Avocado&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;Coconut&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;Kiwi&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;Mango&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="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;ul&amp;gt;
    &amp;lt;li v-for="fruit in fruits"&amp;gt;{{ fruit }}&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt; 
    `&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;


&lt;span class="c1"&gt;// create a root instance and register the local component inside it &lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;app&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;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#vue-app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; 
        &lt;span class="nx"&gt;fruity&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, Use the component name as tag inside template of vue scope&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="c"&gt;&amp;lt;!-- Scope of the vue instance with id equal to vue-app --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

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

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

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

&lt;/div&gt;



&lt;p&gt;So, the result will be listing the fruits as locally component &lt;strong&gt;without CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple&lt;/li&gt;
&lt;li&gt;Orange&lt;/li&gt;
&lt;li&gt;Avocado&lt;/li&gt;
&lt;li&gt;Coconut&lt;/li&gt;
&lt;li&gt;Kiwi&lt;/li&gt;
&lt;li&gt;Mango&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here another example of local vue web component without using the Vue-cli :&lt;br&gt;
&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;// define component body outside vue instance &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Sidebar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h3&amp;gt;Sidebar Section &amp;lt;/h3&amp;gt;&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;Navbar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;h4&amp;gt;Navbar section&amp;lt;/h4&amp;gt;`&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;


&lt;span class="c1"&gt;// create first vue instance &lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;app&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;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#vue-app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;      &lt;span class="c1"&gt;// register local component&lt;/span&gt;
        &lt;span class="nx"&gt;Sidebar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       
        &lt;span class="nx"&gt;Navbar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;   &lt;span class="c1"&gt;// define and register local component inside vue instance   &lt;/span&gt;
            &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;`&amp;lt;h4&amp;gt; My name is {{name}}&amp;lt;/h4&amp;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="c1"&gt;// create second vue instance &lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;app2&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;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#vue-app2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// Not register any local component&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Now, Use the component name as tag inside template of vue scope&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="c"&gt;&amp;lt;!-- Scope of the first vue instance with id equal to vue-app --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="c"&gt;&amp;lt;!-- Here local components will be render it --&amp;gt;&lt;/span&gt;  
        &lt;span class="nt"&gt;&amp;lt;sidebar&amp;gt;&amp;lt;/sidebar&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Navbar&amp;gt;&amp;lt;/Navbar&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;user-name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Noor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/user-name&amp;gt;&lt;/span&gt;

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


&lt;span class="c"&gt;&amp;lt;!-- Scope of the second vue instance with id equal to vue-app2 --&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="c"&gt;&amp;lt;!-- Here local components will not be render it --&amp;gt;&lt;/span&gt;  
     &lt;span class="nt"&gt;&amp;lt;sidebar&amp;gt;&amp;lt;/sidebar&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;Navbar&amp;gt;&amp;lt;/Navbar&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;user-name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Noor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/user-name&amp;gt;&lt;/span&gt;

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

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

&lt;/div&gt;



&lt;p&gt;So, the result will be displaying  as locally component &lt;strong&gt;without CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The result : The local vue component will be work only in the first scope of vue instance, and the second scope of vue instance will not work because we have not register the local components inside the second vue instance. &lt;/p&gt;

&lt;p&gt;So, if we register a component locally, we can use it just in specific vue instance. &lt;/p&gt;

&lt;p&gt;So, if we have 2 vue instances, and we want to use component in the 2 vue instances , we must register it globally, to share that component.&lt;br&gt;
But, if we want to use the componet just once and don't share it, we register it as locally. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Recap&lt;/em&gt; : The Vue Web Component consists of Two main ways to register components which are globally or locally : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Globally &lt;strong&gt;with Vue-Cli&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Globally &lt;strong&gt;without Vue-Cli&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Locally &lt;strong&gt;with Vue-Cli&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Locally &lt;strong&gt;without Vue-Cli&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, Last thing the way we used in Vue-Cli which is we create the &lt;strong&gt;.vue&lt;/strong&gt; files called &lt;strong&gt;Single File Components&lt;/strong&gt; or &lt;strong&gt;Single Page Components&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Past article : &lt;a href="https://dev.to/moxardi/global-web-vue-component-d0d"&gt;Global Web Vue Component&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Global Web Vue Component</title>
      <dc:creator>MoZardi</dc:creator>
      <pubDate>Wed, 24 Oct 2018 08:39:13 +0000</pubDate>
      <link>https://dev.to/moxardi/global-web-vue-component-d0d</link>
      <guid>https://dev.to/moxardi/global-web-vue-component-d0d</guid>
      <description>&lt;h2&gt;
  
  
  Components in Vue
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--at-_9Sh3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.amazonaws.com/coursetro/posts/134-full.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--at-_9Sh3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.amazonaws.com/coursetro/posts/134-full.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web components&lt;/strong&gt; in web applications are &lt;strong&gt;blocks&lt;/strong&gt; (tiny reusable chunks) that encapsulate markup, HTML template, CSS, and Javascript. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Vue.JS web components&lt;/em&gt;&lt;/strong&gt; are just re-usable piece of code or template that we can use in different vue instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Vue.JS web components&lt;/em&gt;&lt;/strong&gt; are blocks of code that can be reused over and over again. By creating the components , you can eliminate the need to write the code multiple times, and it helps your application become more modular and easier to work with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Component syntax&lt;/strong&gt; :&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;Vue.component(tagName, options);&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;tagName&lt;/em&gt; represent the name of the component and takes a String value. &lt;br&gt;
&lt;em&gt;options&lt;/em&gt; represent a function or an options object, So the object contains a bunch of options that might define markup script by the template property, and have another options or properties like data, methods, props etc.&lt;/p&gt;

&lt;p&gt;Defining the component :&lt;/p&gt;

&lt;p&gt;To create a vue.js component you must first register it. &lt;br&gt;
Here is how registering a Vue.js component looks:&lt;br&gt;
&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;// Register vue component before creating the Vue instance&lt;/span&gt;
&lt;span class="c1"&gt;// template property holds the HTML elements to executed once component called&lt;/span&gt;
  &lt;span class="nx"&gt;Vue&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&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;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;p&amp;gt; Hey there, I am a re-usable component &amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
   &lt;span class="p"&gt;});&lt;/span&gt;


&lt;span class="c1"&gt;// Create the root vue instance after creating the vue components&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;span class="na"&gt;el&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-vue&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;Using the component :&lt;/p&gt;

&lt;p&gt;To use a vue.js component you must call or invoke the component by using the custom element named the component name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calling Component syntax&lt;/strong&gt; :&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;&amp;lt;tagName&amp;gt;&amp;lt;/tagName&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;So let's use it!&lt;br&gt;
&lt;/p&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;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;message&amp;gt;&amp;lt;/message&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;The output of the code :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hey there, I am a re-usable component
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, another example for web vue components : &lt;/p&gt;

&lt;p&gt;First, Regitering the component :&lt;br&gt;
&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;// Register a global component named movie-card html tag&lt;/span&gt;
&lt;span class="nx"&gt;Vue&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movie-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;
&lt;span class="c1"&gt;// the props (defines the attributes of the movie-card html tag)&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image&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;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

&lt;span class="c1"&gt;// the template (defines the inner html of the component)&lt;/span&gt;
&lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
&amp;lt;div&amp;gt;
    &amp;lt;img width="100" v-bind:src="image" v-bind:alt="title"/&amp;gt;
    &amp;lt;h2&amp;gt; {{ title }} &amp;lt;/h2&amp;gt;
  &amp;lt;/div&amp;gt;
`&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Root vue instance &lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#vue-app&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;strong&gt;Note that&lt;/strong&gt;: The attributes of props option, we can access to it inside the template option by using the directive v-bind or by mustashue style &lt;code&gt;{{}}&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;In other words: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If we use the props as value of attribute of the Html element, then we must use the v-bind directive on that attribute.&lt;/li&gt;
&lt;li&gt;If we use the props as value of any Html elements, then we must use the Mustashue style &lt;code&gt;{{}}&lt;/code&gt; inside Html elements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Second, Invoking the component:&lt;br&gt;
&lt;/p&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;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

 &lt;span class="nt"&gt;&amp;lt;movie-card&lt;/span&gt;
 &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Mo Salah"&lt;/span&gt;       
 &lt;span class="na"&gt;image=&lt;/span&gt;&lt;span class="s"&gt;"http://www.arabnews.com/sites/default/files/styles/n_670_395/public/2018/06/04/1210816-177415191.jpg?itok=rgY5P4oi"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/movie-card&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;As you can see, you can use the registered component like an HTML element.&lt;/p&gt;

&lt;p&gt;Lastly, third example for web vue components : &lt;/p&gt;

&lt;p&gt;We will use the &lt;strong&gt;Materialize CSS&lt;/strong&gt; framework with &lt;strong&gt;VueJS&lt;/strong&gt; framework to make palyer cards. &lt;/p&gt;

&lt;p&gt;link: &lt;a href="https://materializecss.com"&gt;Materialize CSS&lt;/a&gt;&lt;br&gt;
&lt;/p&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"vue-app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

   &lt;span class="nt"&gt;&amp;lt;player-card&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Mo Salah"&lt;/span&gt;
                &lt;span class="na"&gt;bio=&lt;/span&gt;&lt;span class="s"&gt;"Professional Footballer for Liverpool FC and Egypt."&lt;/span&gt;             
                &lt;span class="na"&gt;twitter=&lt;/span&gt;&lt;span class="s"&gt;"https://twitter.com/MoSalah"&lt;/span&gt; 
                &lt;span class="na"&gt;image=&lt;/span&gt;&lt;span class="s"&gt;"https://d3j2s6hdd6a7rg.cloudfront.net/v2/uploads/media/
                       default/0001/68/thumb_67083_default_news_size_5.jpeg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/player-card&amp;gt;&lt;/span&gt;


   &lt;span class="nt"&gt;&amp;lt;player-card&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Cristiano Ronaldo"&lt;/span&gt; 
                &lt;span class="na"&gt;bio=&lt;/span&gt;&lt;span class="s"&gt;"Professional Footballer for Juventus FC and Portuguesa."&lt;/span&gt;                                       
                &lt;span class="na"&gt;twitter=&lt;/span&gt;&lt;span class="s"&gt;"https://twitter.com/cristiano"&lt;/span&gt; 
                &lt;span class="na"&gt;image=&lt;/span&gt;&lt;span class="s"&gt;"https://d3j2s6hdd6a7rg.cloudfront.net/v2/uploads/media/
                       default/0001/68/thumb_67083_default_news_size_5.jpeg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/player-card&amp;gt;&lt;/span&gt;


   &lt;span class="nt"&gt;&amp;lt;player-card&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Neymar da Silva Santos"&lt;/span&gt; 
                &lt;span class="na"&gt;bio=&lt;/span&gt;&lt;span class="s"&gt;"Professional Footballer for Paris Saint-Germain FC and Brasileira."&lt;/span&gt; 
                &lt;span class="na"&gt;twitter=&lt;/span&gt;&lt;span class="s"&gt;"https://twitter.com/neymarjr"&lt;/span&gt; 
                &lt;span class="na"&gt;image=&lt;/span&gt;&lt;span class="s"&gt;"https://images.cdn.fourfourtwo.com/sites/fourfourtwo.com/
                files/styles/image_landscape/public/neymarcropped
                _1dddbvc0xb8gt18uqwcscs9y4r.jpgitok=PVUv2vle&amp;amp;c
                =87b6d99828d88c1b8ffe17a08d24fc7d"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/player-card&amp;gt;&lt;/span&gt;     

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

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

&lt;/div&gt;



&lt;p&gt;So, let's register a component named &lt;em&gt;player-card&lt;/em&gt; , and then assign 4 props value named &lt;em&gt;name&lt;/em&gt; , &lt;em&gt;image&lt;/em&gt; , &lt;em&gt;bio&lt;/em&gt; , &lt;em&gt;twitter&lt;/em&gt; to pass data from parent. &lt;/p&gt;

&lt;p&gt;Also, initial the template option which is a string of HTML which is displayed where the component is located in the HTML document. &lt;/p&gt;

&lt;p&gt;Remember that binds the 4 props value from parent to template option.&lt;br&gt;
&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;// Register component before instantiating the Vue instance&lt;/span&gt;

 &lt;span class="nx"&gt;Vue&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;player-card&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;props&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;name&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;image&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;bio&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;twitter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;div class="col s12 m7 l4"&amp;gt;
      &amp;lt;div class="card"&amp;gt;
        &amp;lt;div class="card-image"&amp;gt;
          &amp;lt;img v-bind:src="image" height="180px"&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="card-content"&amp;gt;
            &amp;lt;span class="card-title red-text"&amp;gt;  
              &amp;lt;div class="chip"&amp;gt;
              {{name}}
              &amp;lt;/div&amp;gt;
          &amp;lt;/span&amp;gt;
          &amp;lt;p&amp;gt; {{bio}} &amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="card-action purple darken-4 "&amp;gt;
          &amp;lt;a :href="twitter" target="_blank" class="blue-text darken-4"&amp;gt;Twitter Account&amp;lt;/a&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
      `&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;


&lt;span class="c1"&gt;// Vue root instance&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#vue-app&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;Here's the result of code : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IlUfVrub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://preview.ibb.co/hDHsdA/cards.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IlUfVrub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://preview.ibb.co/hDHsdA/cards.png" alt="3 player cards"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Recap&lt;/em&gt; : The Web Vue Components are giving you the capability to declare your HTML elements once and reuse them on multiple pages. Yeah! Those are the reusable chunks of code.&lt;br&gt;
So, Vue Components make your code more dynamic.&lt;/p&gt;

&lt;p&gt;Also, Vue Components can be used in different vue instances, So when you want to use block of code in two or three vue instances you can do it by using vue components, Instead of write block of code in tamplate option on each vue instances, we write once in one vue component, then called in vue instances scope.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Reference&lt;/em&gt;: &lt;a href="https://vuejs.org/v2/api/#Vue-component"&gt;Vue-component&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
