<?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: Bernhard Wittmann</title>
    <description>The latest articles on DEV Community by Bernhard Wittmann (@berniwittmann).</description>
    <link>https://dev.to/berniwittmann</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%2F130202%2F5b7c1a87-b8ca-4faa-a0c3-2b0b95a8bc1e.jpg</url>
      <title>DEV Community: Bernhard Wittmann</title>
      <link>https://dev.to/berniwittmann</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/berniwittmann"/>
    <language>en</language>
    <item>
      <title>Think about the Bus</title>
      <dc:creator>Bernhard Wittmann</dc:creator>
      <pubDate>Sat, 21 Aug 2021 08:40:40 +0000</pubDate>
      <link>https://dev.to/berniwittmann/think-about-the-bus-27e3</link>
      <guid>https://dev.to/berniwittmann/think-about-the-bus-27e3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;„What would happen if you or one of your team members would be hit by a bus?“ &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have you asked yourself this question before? I know it feels kind of weird to be thinking about stuff like this, but there is more to this morbid question than you would might think. &lt;/p&gt;

&lt;p&gt;This question tries to estimate the &lt;a href="https://en.wikipedia.org/wiki/Bus_factor"&gt;„bus-factor“&lt;/a&gt; and is a measurement for risk and assesses the consequences of losing a key technical member of your team. &lt;/p&gt;

&lt;p&gt;Imagine a developer that is the only one of your team that has knowledge of a specific subsystem or someone who is the only one with the credentials to an important server. What would happen if this developer would get hit by a bus (or other scenarios, like illness, taking a new job, parental leave, sabbatical) and is not available anymore suddenly? Things would come to a halt quickly. &lt;/p&gt;

&lt;p&gt;This is a problem if someone on your team (or yourself) is a single point of failure. There are two main aspects that I find most important but there are probably some more aspects that are true for specific situations: &lt;/p&gt;

&lt;h3&gt;
  
  
  Capabilities
&lt;/h3&gt;

&lt;p&gt;Does one person hold the only access rights to specific parts of your system, or is a person the only one having the authentication details for something. You would not want to be locked out of your own system&lt;/p&gt;

&lt;h3&gt;
  
  
  Knowledge
&lt;/h3&gt;

&lt;p&gt;Is one person the sole expert in one area, where other team members do not know how it works. This makes the expert a critical dependency and it is very hard for other people to take over, because the knowledge is too concentrated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask yourself
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Can you think of something in your current team and application where you would get problems if someone would get hit by a bus? Especially ask yourself, where would problems arise if I would be gone suddenly?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What to do about it?
&lt;/h2&gt;

&lt;p&gt;You have identified some things where you have critical dependencies. Great, so how can you alleviate them? &lt;/p&gt;

&lt;p&gt;Regarding authentication details, it makes sense to think about your access rights concept so that there is not one overall admin. But of course you would not also want to give everyone full admin rights.&lt;/p&gt;

&lt;p&gt;To tackle the problem of knowledge concentration there are three ways to go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reduce complexity&lt;/strong&gt;: so lesser knowledge is required to understand a component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: To provide an easier knowledge transfer document all processes and things you are working on and more importantly &lt;strong&gt;keep it up to date&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross training&lt;/strong&gt;: do some pair programming to encourage thinking about other areas of your system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also thinking about the bus factor is not a one time thing, but an ongoing tool to assess risks within your development team, especially if you are working in a small team or startup&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>management</category>
      <category>startup</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Advice needed: How not to get frustrated when time runs out</title>
      <dc:creator>Bernhard Wittmann</dc:creator>
      <pubDate>Tue, 22 Sep 2020 15:44:51 +0000</pubDate>
      <link>https://dev.to/berniwittmann/advice-needed-how-not-to-get-frustrated-when-time-runs-out-3g93</link>
      <guid>https://dev.to/berniwittmann/advice-needed-how-not-to-get-frustrated-when-time-runs-out-3g93</guid>
      <description>&lt;p&gt;I notice that I get frustrated quite easily when the time for a task runs out. This do not necessarily have to be deadlines that are not met, but also self imposed time frames for tasks.&lt;/p&gt;

&lt;p&gt;Especially today was a rough day in which I did not complete much of the tasks I thought I would be able to do today. I'm at a point right now where I say quit that and ask the DEV community for help and advice.&lt;/p&gt;

&lt;p&gt;How do you deal with the frustration or what are your methods to prevent this?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>help</category>
      <category>psychology</category>
    </item>
    <item>
      <title>Handling Dialogs with Vue Router</title>
      <dc:creator>Bernhard Wittmann</dc:creator>
      <pubDate>Wed, 17 Apr 2019 11:21:45 +0000</pubDate>
      <link>https://dev.to/berniwittmann/handling-dialogs-with-vue-router-29ji</link>
      <guid>https://dev.to/berniwittmann/handling-dialogs-with-vue-router-29ji</guid>
      <description>&lt;p&gt;In the first part of this little series on Vue Router Architecture I wrote about &lt;a href="https://dev.to/berniwittmann/my-approach-on-vue-router-architecture-and-nested-routes-2kmo"&gt;handling nested routes with Vue Router&lt;/a&gt;. It would maybe easier to follow if you have read that already, but here is a very short summary:&lt;br&gt;
That tutorial introduced an &lt;code&gt;EmptyRouterView&lt;/code&gt; component for handling the nested routes.&lt;/p&gt;

&lt;p&gt;But we can also use this component for handling dialogs like this one:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwaiiqewizfikk9epbnn.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwaiiqewizfikk9epbnn.png"&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejvtface3pqfspj3wkrf.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejvtface3pqfspj3wkrf.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By handling the visibility of dialogs with vue router we can easily toggle them by navigating to the corresponding urls. And in my opinion this results in a more clean codebase. So how do we do it?&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Update our &lt;code&gt;EmptyRouterView&lt;/code&gt; Component
&lt;/h3&gt;

&lt;p&gt;First we need to edit our &lt;code&gt;EmptyRouterView&lt;/code&gt; component:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;router-view name="dialog"&amp;gt;&amp;lt;/router-view&amp;gt;
    &amp;lt;router-view&amp;gt;&amp;lt;/router-view&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;



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

&lt;/div&gt;
&lt;p&gt;The component now contains two &lt;code&gt;router-views&lt;/code&gt;. The lower one (the default one) is used for displaying the background (or the normal page in case no dialog should be shown). Meanwhile the one for the dialog will contain the content of our dialog.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Create a component for our dialog
&lt;/h3&gt;

&lt;p&gt;Now we have to create a component for our dialog:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

template&amp;gt;
  &amp;lt;div class="dialog"&amp;gt;
    &amp;lt;div class="dialog__inner"&amp;gt;
      &amp;lt;h3&amp;gt;My Dialog&amp;lt;/h3&amp;gt;
      &amp;lt;p&amp;gt;Content&amp;lt;/p&amp;gt;
      &amp;lt;a class="btn" @click="close"&amp;gt;Close&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
export default {
  methods: {
    close () {
      this.$router.back()
    }
  }
}
&amp;lt;/script&amp;gt;

&amp;lt;style lang="scss"&amp;gt;
.dialog {
  # Styling for the background overlay of the dialog

  &amp;amp;__inner {
    # Styling for the dialog itself
  }
}
&amp;lt;/style&amp;gt;



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

&lt;/div&gt;
&lt;p&gt;This is a pretty simple component, however you need some styling to make it look like a dialog (you could also use bootstraps classes for it, or something else). Maybe you noticed that I also included a back button already. We can simply use the &lt;code&gt;router.back()&lt;/code&gt; method for navigating one page back to close the modal, since we toggle the visibility with the routes from Vue-Router.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Update the Route Config
&lt;/h3&gt;

&lt;p&gt;Last but not least we have to specify the route configuration for Vue Router in our &lt;code&gt;router.js&lt;/code&gt; config: &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

routes: [{
    path: '/nested,
    component: EmptyRouterView,
    children: [{
        name: 'nested',
        path: '',
        component: MyPageView
    }, {
        name: 'nested.dialog',
        path: 'dialog',
        components: {
            default: MyPageView,
            dialog: MyDialogComponent
        }
    }]
}]


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

&lt;/div&gt;
&lt;p&gt;For our dialog route with name &lt;code&gt;nested.dialog&lt;/code&gt; at the url &lt;code&gt;/nested/dialog&lt;/code&gt; we specify the components &lt;code&gt;MyPageView&lt;/code&gt; as the background and &lt;code&gt;MyDialogComponent&lt;/code&gt; for the dialog itself. Since this route is a child of a route that has the &lt;code&gt;EmptyRouterView&lt;/code&gt; component, these components directly fill the &lt;code&gt;router-views&lt;/code&gt; specified in our &lt;code&gt;EmptyRouterView&lt;/code&gt; Component.&lt;/p&gt;

&lt;p&gt;This was already it. Now we can navigate to our route at &lt;code&gt;/nested/dialog&lt;/code&gt; and you'll see the dialog: &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwaiiqewizfikk9epbnn.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwaiiqewizfikk9epbnn.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also play around with it in the repo i created:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/BerniWittmann" rel="noopener noreferrer"&gt;
        BerniWittmann
      &lt;/a&gt; / &lt;a href="https://github.com/BerniWittmann/vue-router-architecture" rel="noopener noreferrer"&gt;
        vue-router-architecture
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Architecture approach on Vue Router
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;My Vue Router Architecture Approach&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;This repository should demonstrate my basic approach on Vue Router Architecture and nested routes. It also displays the possibility of handling dialogs with Vue Router&lt;/p&gt;
&lt;p&gt;I use a view called &lt;code&gt;EmptyRouterView&lt;/code&gt; (which just contains a router view, and one for the dialog) to achieve a clean way to structure my nested routing configuration and an easy way to handle dialogs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The corresponding Blog Post can be found on &lt;a href="https://dev.to/berniwittmann/" rel="nofollow"&gt;dev.to&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/berniwittmann/my-approach-on-vue-router-architecture-and-nested-routes-2kmo" rel="nofollow"&gt;Part 1: Route Handling&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/berniwittmann/handling-dialogs-with-vue-router-29ji" rel="nofollow"&gt;Part 2: Dialog Handling&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Project setup&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Compiles and hot-reloads for development&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm run serve
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;❓ Got any questions?&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Don't hesitate to drop me an email to &lt;a href="https://github.com/BerniWittmann/vue-router-architecturemailto:dev@bernhardwittmann.com" rel="noopener noreferrer"&gt;dev@bernhardwittmann.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/BerniWittmann/vue-router-architecture" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;That's it for now. Feel free to let me know your thoughts on this 😁&lt;/p&gt;

</description>
      <category>vue</category>
      <category>tutorial</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Vue Router Architecture and Nested Routes</title>
      <dc:creator>Bernhard Wittmann</dc:creator>
      <pubDate>Thu, 21 Mar 2019 16:55:52 +0000</pubDate>
      <link>https://dev.to/berniwittmann/my-approach-on-vue-router-architecture-and-nested-routes-2kmo</link>
      <guid>https://dev.to/berniwittmann/my-approach-on-vue-router-architecture-and-nested-routes-2kmo</guid>
      <description>&lt;p&gt;Working with nested routes can be quite a hassle...&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsnevvp6tssmmp1o9lsv.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsnevvp6tssmmp1o9lsv.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Therefore I did come up with a conclusion on how to keep the routing configuration clean and to ease the working with nested routes.&lt;/p&gt;

&lt;p&gt;There are already some tutorials on how to work with Vue Router in general, but I want to focus on this specific issue and the architecture around it.&lt;/p&gt;

&lt;p&gt;I'll guide you through the creation of the example repo below and show you how I solved this&lt;/p&gt;

&lt;h3&gt;
  
  
  The main issue
&lt;/h3&gt;

&lt;p&gt;The main problem is that if you want to nest routes the parent route component needs to always contain a &lt;code&gt;&amp;lt;router-view&amp;gt;&amp;lt;/router-view&amp;gt;&lt;/code&gt;. This can be quite annoying sometimes and in my opinion it just does not feel right. Also this leads to high coupling between the component itself and its sub-routes / the routing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Add an &lt;code&gt;EmptyRouterView&lt;/code&gt; Component
&lt;/h3&gt;

&lt;p&gt;At first we create an &lt;code&gt;EmptyRouterView&lt;/code&gt; Component, which just contains &lt;code&gt;&amp;lt;router-view&amp;gt;&amp;lt;/router-view&amp;gt;&lt;/code&gt;. &lt;/p&gt;

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

&amp;lt;template&amp;gt;
  &amp;lt;router-view&amp;gt;&amp;lt;/router-view&amp;gt;
&amp;lt;/template&amp;gt;


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

&lt;/div&gt;
&lt;p&gt;That is nearly the whole magic. Now we just need to use this component correctly in our route configuration&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Adjust your Components to the new architecture
&lt;/h3&gt;

&lt;p&gt;Head over to your route config (probably &lt;code&gt;router.js&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;The current config will probably look like this&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// Old Config
  {
      path: '/my-route',
      component: MyRouteView,
      name: 'route',
      children: [...]
  }


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

&lt;/div&gt;
&lt;p&gt;Let's change it like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// New Config
 {
      path: '/my-route',
      component: EmptyRouterView,
      children: [{
        name: 'route',
        path: '',
        component: MyRouteView
      }]
  }


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

&lt;/div&gt;
&lt;p&gt;We declare some kind of &lt;em&gt;abstract&lt;/em&gt; Route with the &lt;code&gt;EmptyRouterView&lt;/code&gt; as component. as a default child component we now add our old route configuration, but with an empty path. The empty path leads to this child route to be rendered when a user navigates to &lt;code&gt;/my-route&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;You'll also notice, that we gave our &lt;em&gt;abstract&lt;/em&gt; parent route no name. This also helps, since when we add links to our application and refer to routes by name, we won't accidentally render the &lt;em&gt;empty&lt;/em&gt; parent route.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Nesting Routes
&lt;/h3&gt;

&lt;p&gt;Now we can easily nest routes:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// Nested Config
 {
      path: '/my-route',
      component: EmptyRouterView,
      children: [{
        name: 'route',
        path: '',
        component: MyRouteView
      }, {
        name: 'route.child-one'
        path: 'child-one',
        component: ChildOneView
      }, {
        name: 'route.child-two'
        path: 'child-two',
        component: ChildTwoView
      }]
  }


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

&lt;/div&gt;
&lt;p&gt;See how easy it is to nest routes 💪🏻 When a user navigates to &lt;code&gt;/my-route/child-one&lt;/code&gt; the &lt;code&gt;ChildOneView&lt;/code&gt; should be rendered as intended. &lt;/p&gt;
&lt;h3&gt;
  
  
  Step 4: Deep Nesting Routes
&lt;/h3&gt;

&lt;p&gt;We can also nest routes in our nested routes. Some kind of Route-ception&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyky0ypikpio41dj1k8wj.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyky0ypikpio41dj1k8wj.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Yes I know: bad wordplay 😁)&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// Deep Nested Config
 {
      path: '/my-route',
      component: EmptyRouterView,
      children: [{
        name: 'route',
        path: '',
        component: MyRouteView
      }, {
        path: 'sub',
        component: EmptyRouterView,
        children: [{
            name: 'deep',
            path: '',
            component: MyDeepRouteView
          }, {
            name: 'deep.child-one'
            path: 'deep-one',
            component: ChildOneView
          }, {
            name: 'route.child-two'
            path: 'deep-two',
            component: ChildTwoView
          }]
      }]
  }


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

&lt;/div&gt;
&lt;p&gt;The path &lt;code&gt;/my-route/sub/deep-one&lt;/code&gt; would lead to ChildOneView beeing rendered. &lt;/p&gt;

&lt;p&gt;I think I reached my word limit of the word routes, therefore I'll leave you with this. I condensed all of this in a repo, where you can see it all in action&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/BerniWittmann" rel="noopener noreferrer"&gt;
        BerniWittmann
      &lt;/a&gt; / &lt;a href="https://github.com/BerniWittmann/vue-router-architecture" rel="noopener noreferrer"&gt;
        vue-router-architecture
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Architecture approach on Vue Router
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;My Vue Router Architecture Approach&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;This repository should demonstrate my basic approach on Vue Router Architecture and nested routes. It also displays the possibility of handling dialogs with Vue Router&lt;/p&gt;

&lt;p&gt;I use a view called &lt;code&gt;EmptyRouterView&lt;/code&gt; (which just contains a router view, and one for the dialog) to achieve a clean way to structure my nested routing configuration and an easy way to handle dialogs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The corresponding Blog Post can be found on &lt;a href="https://dev.to/berniwittmann/" rel="nofollow"&gt;dev.to&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/berniwittmann/my-approach-on-vue-router-architecture-and-nested-routes-2kmo" rel="nofollow"&gt;Part 1: Route Handling&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/berniwittmann/handling-dialogs-with-vue-router-29ji" rel="nofollow"&gt;Part 2: Dialog Handling&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Project setup&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Compiles and hot-reloads for development&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm run serve
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;❓ Got any questions?&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Don't hesitate to drop me an email to &lt;a href="https://github.com/BerniWittmann/vue-router-architecturemailto:dev@bernhardwittmann.com" rel="noopener noreferrer"&gt;dev@bernhardwittmann.com&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/BerniWittmann/vue-router-architecture" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Short Spoiler: Modals
&lt;/h3&gt;

&lt;p&gt;In the next part of this little series on Vue Router Architecture I would like to talk about handling Modals with Vue Router. The approach I explained above also has another advantage. It makes it very easy to deal with Dialogs (These Popups/Modals, I never know what to call them 🙄). Find Part 2 here: &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/berniwittmann" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F130202%2F5b7c1a87-b8ca-4faa-a0c3-2b0b95a8bc1e.jpg" alt="berniwittmann"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/berniwittmann/handling-dialogs-with-vue-router-29ji" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Handling Dialogs with Vue Router&lt;/h2&gt;
      &lt;h3&gt;Bernhard Wittmann ・ Apr 17 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;I know there may be a hundred different approaches on this topic and I'd be glad to hear your thoughts on this 😉 And as always: should you have any questions, don't hesitate to ask&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqgu130md1ysgog1dz19.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqgu130md1ysgog1dz19.gif" alt="Peace Out"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>Thank you for my first blog post ever and what should i write next?</title>
      <dc:creator>Bernhard Wittmann</dc:creator>
      <pubDate>Wed, 20 Mar 2019 13:54:34 +0000</pubDate>
      <link>https://dev.to/berniwittmann/thank-you-for-the-appreciation-on-my-first-blog-post-ever-4apm</link>
      <guid>https://dev.to/berniwittmann/thank-you-for-the-appreciation-on-my-first-blog-post-ever-4apm</guid>
      <description>&lt;p&gt;Last week I got inspired by &lt;a href="https://dev.to/rachelsoderberg/junior-developers-should-start-a-technical-blog-early-in-their-career-19bg"&gt;Rachels post on starting a blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Therefore I sat down and wrote my &lt;strong&gt;first blog post ever&lt;/strong&gt; last sunday 💪🏻&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/berniwittmann" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zxltExsT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--6Cd1QU1H--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/130202/5b7c1a87-b8ca-4faa-a0c3-2b0b95a8bc1e.jpg" alt="berniwittmann"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/berniwittmann/quick--easy-documentation-generation-for-vuejs-components-7k6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Quick &amp;amp; easy documentation generation for Vue.js components&lt;/h2&gt;
      &lt;h3&gt;Bernhard Wittmann ・ Mar 17 '19 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#documentation&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;And I'm astonished by the appreciation it got with over 800 views and 150 new followers. It will even be added to the &lt;a href="https://vuejsdevelopers.com/"&gt;Vue.js Developers&lt;/a&gt; newsletter 🎉.&lt;/p&gt;

&lt;p&gt;I don't know whether this is much or not for this platform. Nevertheless I'm thrilled!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/5GoVLqeAOo6PK/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/5GoVLqeAOo6PK/giphy.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Therefore I wanted to say thank you for the appreciation and this motivation-boost.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/26gsjCZpPolPr3sBy/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/26gsjCZpPolPr3sBy/giphy.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also want to use this opportunity to start writing more. So i want to know:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are some topics you would like to hear about?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I think I'm quite experienced in Vue and webdev in general therefore I want to give something back and share my knowledge. I'd be glad to hear about your ideas on some topics 😊&lt;/p&gt;

</description>
      <category>personalnews</category>
      <category>motivation</category>
      <category>writing</category>
      <category>tips</category>
    </item>
    <item>
      <title>Quick &amp; easy documentation generation for Vue.js components</title>
      <dc:creator>Bernhard Wittmann</dc:creator>
      <pubDate>Sun, 17 Mar 2019 08:16:28 +0000</pubDate>
      <link>https://dev.to/berniwittmann/quick--easy-documentation-generation-for-vuejs-components-7k6</link>
      <guid>https://dev.to/berniwittmann/quick--easy-documentation-generation-for-vuejs-components-7k6</guid>
      <description>&lt;p&gt;Did you ever lose oversight over the components of your Vue application? &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxkmhev8bfc6omtnegfd.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxkmhev8bfc6omtnegfd.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If that's the case, you should definitely care about documenting your components. So what is the first idea here: Fire up a page in a wiki and just write down what each component does. However this may not be the best approach, because people tend to forget updating the documentation (or just don't want to, like myself).&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydl8wemdmzn357grdzud.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydl8wemdmzn357grdzud.gif" width="440" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So why don't automatically generate a slick documentation page directly from your code? But how?&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0bz09q9sllvdc08iszf.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0bz09q9sllvdc08iszf.gif" width="275" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't worry! vuese has your back. It can autogenerate documentation for your components and renders it as a neat &amp;amp; simple html page.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vuese" rel="noopener noreferrer"&gt;
        vuese
      &lt;/a&gt; / &lt;a href="https://github.com/vuese/vuese" rel="noopener noreferrer"&gt;
        vuese
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🤗 One-stop solution for vue component documentation. Original org: https://github.com/vuese
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;vuese&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/14146560/51301277-9712f100-1a69-11e9-8e3b-fec861c2f31c.png"&gt;&lt;img width="200" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F14146560%2F51301277-9712f100-1a69-11e9-8e3b-fec861c2f31c.png"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;One-stop solution for vue component documentation&lt;/p&gt;

&lt;p&gt;This project is supported by our &lt;a href="https://github.com/vuese/vuese./BACKERS.md" rel="noopener noreferrer"&gt;Backers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/vuese/vuese/actions" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/vuese/vuese/workflows/Node%20CI/badge.svg" alt="build status"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/vue-contrib/vuese/blob/monorepo/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/45e5ff3627ed14688f31a427e516fc33cdcba970d076c42ad87486cdda736f53/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f76756573652f76756573652e737667" alt="License"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/vue-contrib/vuese/pull/new" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/117d45589278b3d3a2b8570a8260c576adf8e22d4406b974ebb48d35c8b8aab8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732532302d77656c636f6d652d627269676874677265656e2e737667" alt="PRs Welcome"&gt;&lt;/a&gt;
  &lt;a href="http://commitizen.github.io/cz-cli/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1d01d79de532fa2a8b9d3e1c29e2b5d6f700b6d36f108c8416faca472cb35b6f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f6d6d6974697a656e2d667269656e646c792d627269676874677265656e2e737667" alt="Commitizen friendly"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/prettier/prettier" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/754faf8c130f602a98f87fd2912a8d4b9bcf8ab623fa9ac3352853015968cdb9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64655f7374796c652d70726574746965722d6666363962342e737667" alt="Code style"&gt;&lt;/a&gt;
  &lt;a href="https://www.patreon.com/HcySunYang" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/78eab20da6aa2f8a0a12a289f62fcad3629455be2d18be34c03c87a87f1461de/68747470733a2f2f62616467656e2e6e65742f62616467652f737570706f72742532306d652f646f6e6174652f666630306666" alt="Support me"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Document&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;For detailed documentation: &lt;a href="https://vuese.github.io/website/" rel="nofollow noopener noreferrer"&gt;https://vuese.github.io/website/&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://vuese.github.io/website/" rel="nofollow noopener noreferrer"&gt;Vuese&lt;/a&gt; Automatically generate documentation for your &lt;code&gt;vue&lt;/code&gt; component, and provides a variety of solutions for generating component documentation to meet your different needs.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;@vuese/cli&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/@vuese/cli" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f5623fc3954d11879d079b35cbcbf4859404652dfd429aafd717b7f59dc2a176/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f4076756573652f636c692e737667" alt=""&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/@vuese/cli" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/baef2d2d99af7565d0a96f143e30276deee6093ef523572d8be37f2516ddc8c2/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f4076756573652f636c692e737667" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vuese.github.io/website/cli/" rel="nofollow noopener noreferrer"&gt;@vuese/cli&lt;/a&gt; is a command line tool that is very simple to use. If you want to quickly build a documentation site for your &lt;code&gt;vue&lt;/code&gt; component or just want to generate &lt;code&gt;markdown&lt;/code&gt; document for your &lt;code&gt;vue&lt;/code&gt; component, then this tool might be a good choice. Please go to the details: &lt;a href="https://vuese.github.io/website/cli/" rel="nofollow noopener noreferrer"&gt;@vuese/cli&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;@vuese/parser&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.npmjs.com/package/@vuese/parser" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/24294159b82215be74d0a4d45b469751038e657f07873f81ec83d813ba5d3297/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f4076756573652f7061727365722e737667" alt=""&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/@vuese/parser" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/20acf5d9bd820880a65bdeb36b979f99f0ceec576d7a5a482ca322ea2a98b111/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f4076756573652f7061727365722e737667" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://vuese.github.io/website/parser/" rel="nofollow noopener noreferrer"&gt;@vuese/parser&lt;/a&gt; module is the parser for the &lt;code&gt;vue&lt;/code&gt; component, &lt;a href="https://vuese.github.io/website/cli/" rel="nofollow noopener noreferrer"&gt;@vuese/cli&lt;/a&gt; internally parsing the &lt;code&gt;vue&lt;/code&gt; component via the &lt;a href="https://vuese.github.io/website/parser/" rel="nofollow noopener noreferrer"&gt;@vuese/parser&lt;/a&gt; module and extract the information we want. You can do any more advanced things with the interface provided by the &lt;a href="https://vuese.github.io/website/parser/" rel="nofollow noopener noreferrer"&gt;@vuese/parser&lt;/a&gt; module. For the &lt;code&gt;API&lt;/code&gt; documentation, please go to &lt;a href="https://vuese.github.io/website/parser/" rel="nofollow noopener noreferrer"&gt;@vuese/parser&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Online experience&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Visit the following 👇…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vuese/vuese" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;You can add it to your Vue project right now, by installing it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @vuese/cli 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and then run vuese to generate the documentation&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vuese gen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's all, I swear 🙌🏻&lt;/p&gt;



&lt;p&gt;Now let's take a look at how it works&lt;/p&gt;

&lt;p&gt;Imagine we have the following component:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;!-- Form header --&amp;gt;
    &amp;lt;slot name="header"&amp;gt;
      &amp;lt;!-- `&amp;lt;th&amp;gt;title&amp;lt;/th&amp;gt;` --&amp;gt;
      &amp;lt;th&amp;gt;title&amp;lt;/th&amp;gt;
    &amp;lt;/slot&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
// This is a description of the component
export default {
  name: 'TestComponent',
  props: {
    // The name of the form, up to 8 characters
    name: {
      type: [String, Number],
      required: true,
      validator () {}
    }
  },
  methods: {
    // @vuese
    // Used to manually clear the form
    clear () {
      // Fire when the form is cleared
      // @arg The argument is a boolean value representing xxx
      this.$emit('onclear', true)
    }
  }
}
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This results in this neat html page: &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6xael1244dojxr3es9w.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6xael1244dojxr3es9w.png" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;vuese retrieves the data and annotations from slots, props, methods and events and for the component itself directly from the code. As you can see it even extracts the type and required state from the &lt;code&gt;name&lt;/code&gt; prop. &lt;/p&gt;

&lt;p&gt;You can check out the result here: &lt;a href="https://berniwittmann.github.io/vuese-demo/index.html#/components/TestComponent" rel="noopener noreferrer"&gt;https://berniwittmann.github.io/vuese-demo/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also created a small repo, where you can play around with the annotations and get a feeling of how simple it is.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/BerniWittmann" rel="noopener noreferrer"&gt;
        BerniWittmann
      &lt;/a&gt; / &lt;a href="https://github.com/BerniWittmann/vuese-demo" rel="noopener noreferrer"&gt;
        vuese-demo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Short demo of Vuese Documentation Generation for Vue Components
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/BerniWittmann/vuese-demoassets/header_image_demo_vuese.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FBerniWittmann%2Fvuese-demoassets%2Fheader_image_demo_vuese.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Quick &amp;amp; easy documentation generation for Vue Components with vuese - Demo&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;This repo is a short demo of the tool &lt;a href="https://github.com/vuese/vuese" rel="noopener noreferrer"&gt;vuese&lt;/a&gt; to create component documentation for Vue.js components.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The accompanying blog post can be found on &lt;a href="https://dev.to/berniwittmann/quick--easy-documentation-generation-for-vuejs-components-7k6" rel="nofollow"&gt;dev.to&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/BerniWittmann/vuese-demoassets/result.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FBerniWittmann%2Fvuese-demoassets%2Fresult.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Install the dependencies&lt;/p&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Generate docs&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Generate the docs by running&lt;/p&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm run docs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/BerniWittmann/vuese-demo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;So have fun creating your component documentation and definitely check out &lt;a href="https://vuese.org" rel="noopener noreferrer"&gt;vuese.org&lt;/a&gt; for more information.&lt;/p&gt;

&lt;p&gt;Thanks for reading and I'd be glad about some feedback, since this is my first blog post ever 💪🏻&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqju5jpgzeaumpoduudl.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqju5jpgzeaumpoduudl.gif" width="500" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>documentation</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
