<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Styles on Techformist</title>
    <link>https://techformist.com/tags/styles/</link>
    <description>Recent content in Styles on Techformist</description>
    <image>
      <url>https://techformist.com/logo.svg</url>
      <link>https://techformist.com/logo.svg</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 19 Feb 2020 06:30:00 +0000</lastBuildDate><atom:link href="https://techformist.com/tags/styles/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Layouts in Vuetify vs. Quasar</title>
      <link>https://techformist.com/layouts-vuetify-quasar/</link>
      <pubDate>Wed, 19 Feb 2020 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/layouts-vuetify-quasar/</guid>
      <description>&lt;p&gt;How do you create typical layouts in the the most popular Material Design styling libraries for Vue?&lt;/p&gt;
&lt;h2 id=&#34;creating-layouts-for-your-application&#34;&gt;Creating layouts for your application&lt;/h2&gt;
&lt;p&gt;Layouts help us standardize UI across the application.&lt;/p&gt;
&lt;p&gt;For e.g., you have layouts to take care of -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Toolbar for the app and for views/components&lt;/li&gt;
&lt;li&gt;Navigation bars&lt;/li&gt;
&lt;li&gt;Standard controls (buttons/titles etc.) for list or detail views
.. and so on.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Vuetify and Quasar allow you to do your own thing, but I find the below way of creating layouts easiest.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>How do you create typical layouts in the the most popular Material Design styling libraries for Vue?</p>
<h2 id="creating-layouts-for-your-application">Creating layouts for your application</h2>
<p>Layouts help us standardize UI across the application.</p>
<p>For e.g., you have layouts to take care of -</p>
<ol>
<li>Toolbar for the app and for views/components</li>
<li>Navigation bars</li>
<li>Standard controls (buttons/titles etc.) for list or detail views
.. and so on.</li>
</ol>
<p>Vuetify and Quasar allow you to do your own thing, but I find the below way of creating layouts easiest.</p>
<h2 id="vuetify">Vuetify</h2>
<p>Vuetify is an amazing library and we choose Vuetify for client projects most of the times if material design standards are agreeable.</p>
<p>I typically do not end up using layouts in Vue router when using Vuetify. - I should, but found it harder to reuse. Instead I use layouts like a beginner would.</p>
<h3 id="create-layouts">Create layouts</h3>
<p>Create a new folder - <code>components/layouts</code> in your Vue project.</p>
<p>Create a baseline panel that comprises of -</p>
<ul>
<li>a toolbar</li>
<li>placeholder to show &lsquo;alerts&rsquo;</li>
<li>slots for toolbar items and main content</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- Panel.vue --&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">v-toolbar</span>
</span></span><span class="line"><span class="cl">      <span class="na">flat</span>
</span></span><span class="line"><span class="cl">      <span class="na">dense</span>
</span></span><span class="line"><span class="cl">      <span class="na">v-if</span><span class="o">=</span><span class="s">&#34;title&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">fill-height</span>
</span></span><span class="line"><span class="cl">      <span class="na">class</span><span class="o">=</span><span class="s">&#34;align-center ma-0 pa-0&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-toolbar-title</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;title primary--text&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">v-icon</span> <span class="na">v-if</span><span class="o">=</span><span class="s">&#34;icon&#34;</span> <span class="na">color</span><span class="o">=</span><span class="s">&#34;primary&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;mr-2&#34;</span><span class="p">&gt;</span>{{ icon }}<span class="p">&lt;/</span><span class="nt">v-icon</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">span</span> <span class="na">color</span><span class="o">=</span><span class="s">&#34;primary&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;font-weight-bold&#34;</span><span class="p">&gt;</span>{{ title }}<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">v-toolbar-title</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-spacer</span><span class="p">&gt;&lt;/</span><span class="nt">v-spacer</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">slot</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;toolbar-items&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">slot</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">template</span> <span class="na">v-slot:extension</span> <span class="na">v-if</span><span class="o">=</span><span class="s">&#34;extn&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">slot</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;toolbar-extn&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">slot</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-progress-linear</span>
</span></span><span class="line"><span class="cl">        <span class="na">:active</span><span class="o">=</span><span class="s">&#34;loading&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="na">:loading</span><span class="o">=</span><span class="s">&#34;loading&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="na">:indeterminate</span><span class="o">=</span><span class="s">&#34;true&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="na">bottom</span>
</span></span><span class="line"><span class="cl">        <span class="na">absolute</span>
</span></span><span class="line"><span class="cl">        <span class="na">color</span><span class="o">=</span><span class="s">&#34;#2196F3&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">v-toolbar</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">Alert</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="c">&lt;!-- alert component --&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">v-row</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-col</span> <span class="na">cols</span><span class="o">=</span><span class="s">&#34;12&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">slot</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;content&#34;</span><span class="p">&gt;</span>No content<span class="p">&lt;/</span><span class="nt">slot</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">v-col</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">v-row</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">import</span> <span class="p">{</span> <span class="nx">mapState</span> <span class="p">}</span> <span class="nx">from</span> <span class="s2">&#34;vuex&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">export</span> <span class="k">default</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">name</span><span class="o">:</span> <span class="s2">&#34;panel&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">props</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">title</span><span class="o">:</span> <span class="nb">String</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nx">icon</span><span class="o">:</span> <span class="nb">String</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nx">extn</span><span class="o">:</span> <span class="nb">Boolean</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nx">data</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="p">{};</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nx">computed</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="p">...</span><span class="nx">mapState</span><span class="p">([</span><span class="s2">&#34;loading&#34;</span><span class="p">]),</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nx">components</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">Alert</span><span class="o">:</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="kr">import</span><span class="p">(</span><span class="s2">&#34;../util/Alert&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p><code>Panel.vue</code> will be used by your Vue views.</p>
<p>Optionally, create additional &ldquo;panels&rdquo; for showing specialised components like a &rsquo;list'.</p>
<p>For e.g. have a <code>PanelListMain.vue</code> that includes -</p>
<ul>
<li>a mini toolbar with title and icon</li>
<li>slots</li>
<li>action buttons</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- PanelList.vue --&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">v-card</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;ml-3 mr-3&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">v-toolbar</span> <span class="na">dense</span> <span class="na">flat</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;elevation-1&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">slot</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;toolbar-items&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">slot</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">v-toolbar</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">v-container</span> <span class="na">grid-list-xs</span> <span class="na">fluid</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">slot</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;content&#34;</span><span class="p">&gt;</span>No content<span class="p">&lt;/</span><span class="nt">slot</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">v-container</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">v-card</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">export</span> <span class="k">default</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">name</span><span class="o">:</span> <span class="s2">&#34;PanelListMain&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">props</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">title</span><span class="o">:</span> <span class="nb">String</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>The above layout is often used by components.</p>
<h3 id="using-layouts">Using Layouts</h3>
<p>This is the easy part.</p>
<p>In your main view -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- ./views/ServiceReq.vue --&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">Panel</span> <span class="na">icon</span><span class="o">=</span><span class="s">&#34;mdi-book-plus&#34;</span> <span class="na">title</span><span class="o">=</span><span class="s">&#34;Service Requests&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">template</span> <span class="na">slot</span><span class="o">=</span><span class="s">&#34;toolbar-items&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">template</span> <span class="na">slot</span><span class="o">=</span><span class="s">&#34;content&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">ServiceReqList</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">Panel</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">import</span> <span class="nx">Panel</span> <span class="nx">from</span> <span class="s2">&#34;../components/layouts/Panel&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">import</span> <span class="nx">ServiceReqList</span> <span class="nx">from</span> <span class="s2">&#34;../components/ServiceReqList&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kr">export</span> <span class="k">default</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">components</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">Panel</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nx">ServiceReqList</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>I could use the list layout in the <code>ServiceReqList</code> component -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- ./components/ServiceReqList.vue --&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">PanelListMain</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">template</span> <span class="na">slot</span><span class="o">=</span><span class="s">&#34;toolbar-items&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;subtitle-2&#34;</span><span class="p">&gt;</span>Service List<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-spacer</span><span class="p">&gt;&lt;/</span><span class="nt">v-spacer</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-btn</span> <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;newRecord&#34;</span> <span class="na">small</span> <span class="na">outlined</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        New
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">v-btn</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">template</span> <span class="na">slot</span><span class="o">=</span><span class="s">&#34;content&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-row</span> <span class="na">dense</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">v-col</span> <span class="na">cols</span><span class="o">=</span><span class="s">&#34;12&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">v-card</span> <span class="na">flat</span> <span class="na">color</span><span class="o">=</span><span class="s">&#34;transparent&#34;</span> <span class="na">height</span><span class="o">=</span><span class="s">&#34;100%&#34;</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;overflow:auto&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">v-card-title</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="p">&lt;</span><span class="nt">v-spacer</span><span class="p">&gt;&lt;/</span><span class="nt">v-spacer</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">              <span class="p">&lt;</span><span class="nt">v-text-field</span>
</span></span><span class="line"><span class="cl">                <span class="na">v-model</span><span class="o">=</span><span class="s">&#34;srchSrNum&#34;</span>
</span></span><span class="line"><span class="cl">                <span class="na">prepend-icon</span><span class="o">=</span><span class="s">&#34;mdi-magnify&#34;</span>
</span></span><span class="line"><span class="cl">                <span class="na">label</span><span class="o">=</span><span class="s">&#34;Search SR Number&#34;</span>
</span></span><span class="line"><span class="cl">                <span class="na">single-line</span>
</span></span><span class="line"><span class="cl">              <span class="p">&gt;&lt;/</span><span class="nt">v-text-field</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;/</span><span class="nt">v-card-title</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">v-data-table</span>
</span></span><span class="line"><span class="cl">              <span class="na">:headers</span><span class="o">=</span><span class="s">&#34;headers&#34;</span>
</span></span><span class="line"><span class="cl">              <span class="na">:items</span><span class="o">=</span><span class="s">&#34;serviceReqs.data&#34;</span>
</span></span><span class="line"><span class="cl">              <span class="na">:server-items-length</span><span class="o">=</span><span class="s">&#34;Number(serviceReqs.total)&#34;</span>
</span></span><span class="line"><span class="cl">              <span class="na">hide-default-footer</span>
</span></span><span class="line"><span class="cl">            <span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="p">&lt;</span><span class="nt">template</span> <span class="na">v-slot:item</span><span class="o">=</span><span class="s">&#34;props&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                <span class="p">&lt;</span><span class="nt">tr</span> <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;activeServiceReq = props.item&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                  <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ props.item.sr_number }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                  <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ props.item.type_cd }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                  <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                    <span class="p">&lt;</span><span class="nt">v-icon</span> <span class="na">color</span><span class="o">=</span><span class="s">&#34;success&#34;</span> <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;editRecord(props.item)&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="p">&gt;</span>mdi-pencil<span class="p">&lt;/</span><span class="nt">v-icon</span>
</span></span><span class="line"><span class="cl">                    <span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                  <span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                <span class="p">&lt;/</span><span class="nt">tr</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;/</span><span class="nt">v-data-table</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;/</span><span class="nt">v-card</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">v-col</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">v-col</span> <span class="na">cols</span><span class="o">=</span><span class="s">&#34;12&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;text-md-right pt-2&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">v-pagination</span>
</span></span><span class="line"><span class="cl">            <span class="na">v-model</span><span class="o">=</span><span class="s">&#34;serviceReqs.page&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="na">:total-visible</span><span class="o">=</span><span class="s">&#34;7&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="na">:length</span><span class="o">=</span><span class="s">&#34;serviceReqs.lastPage&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="err">@</span><span class="na">input</span><span class="o">=</span><span class="s">&#34;changePage&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="na">justify</span><span class="o">=</span><span class="s">&#34;end&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&gt;&lt;/</span><span class="nt">v-pagination</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">v-col</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">v-row</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">ServiceReqEdit</span> <span class="na">v-model</span><span class="o">=</span><span class="s">&#34;detailDialog&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">PanelListMain</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c">&lt;!-- removed additional code to keep this simple--&gt;</span>
</span></span></code></pre></div><p>The resulting sample UI.</p>
<p><img loading="lazy" src="/2020/vuetify-layout-sample.jpg" type="" alt="vuetify-layout-sample"  /></p>
<h3 id="examples">Examples</h3>
<p>A more complete example for the layout creation as described here can be found on <a href="https://github.com/techformist/vue-vuetify-api-boost">Vuetify booster starter template</a>.</p>
<h2 id="quasar">Quasar</h2>
<p>Quasar framework is often compared against Vuetify since both of them implement Material Design guidelines. Quasar provides a more controlled ecosystem that can make you productive on web/desktop/mobile UI development and also provide &ldquo;more useful&rdquo; components. [not starting a war here - this is my opinion and I am entitled to have a stupid opinion].</p>
<p>Quasar provides an out-of-the-box way of using layouts in router.</p>
<p>One of my main mottos in life happens to be &ldquo;Do not fight frameworks&rdquo; - so I just follow &ldquo;the way&rdquo;.</p>
<h3 id="create-layouts-1">Create layouts</h3>
<p>Creating layouts is similar to what we did in Vuetify, but we don&rsquo;t use slots in the same way, and we have a different folder structure.</p>
<p>We create a <code>MainLayout.vue</code> which serves the layout -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- ./src/layouts/MainLayout.vue --&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">q-layout</span> <span class="na">view</span><span class="o">=</span><span class="s">&#34;lHh Lpr lFf&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">q-header</span> <span class="na">elevated</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">q-toolbar</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">q-btn</span>
</span></span><span class="line"><span class="cl">          <span class="na">flat</span>
</span></span><span class="line"><span class="cl">          <span class="na">dense</span>
</span></span><span class="line"><span class="cl">          <span class="na">round</span>
</span></span><span class="line"><span class="cl">          <span class="na">icon</span><span class="o">=</span><span class="s">&#34;menu&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="na">aria-label</span><span class="o">=</span><span class="s">&#34;Menu&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;leftDrawerOpen = !leftDrawerOpen&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">q-toolbar-title</span><span class="p">&gt;</span>Mostart<span class="p">&lt;/</span><span class="nt">q-toolbar-title</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;self-right&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">q-btn</span> <span class="na">flat</span> <span class="na">fab</span> <span class="na">to</span><span class="o">=</span><span class="s">&#34;/settings&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">q-icon</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;settings&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;/</span><span class="nt">q-btn</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">q-btn</span> <span class="na">flat</span> <span class="na">fab</span> <span class="na">to</span><span class="o">=</span><span class="s">&#34;/help&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">q-icon</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;help&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;/</span><span class="nt">q-btn</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">q-toolbar</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">q-header</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">q-drawer</span>
</span></span><span class="line"><span class="cl">      <span class="na">v-model</span><span class="o">=</span><span class="s">&#34;leftDrawerOpen&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">show-if-above</span>
</span></span><span class="line"><span class="cl">      <span class="na">bordered</span>
</span></span><span class="line"><span class="cl">      <span class="na">content-class</span><span class="o">=</span><span class="s">&#34;bg-grey-1&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">q-list</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">q-item-label</span> <span class="na">header</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;text-grey-8&#34;</span><span class="p">&gt;</span>Options<span class="p">&lt;/</span><span class="nt">q-item-label</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="c">&lt;!-- This is just a link --&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">EssentialLink</span>
</span></span><span class="line"><span class="cl">          <span class="na">v-for</span><span class="o">=</span><span class="s">&#34;link in essentialLinks&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="na">:key</span><span class="o">=</span><span class="s">&#34;link.title&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="na">v-bind</span><span class="o">=</span><span class="s">&#34;link&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">q-list</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">q-list</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="c">&lt;!-- &lt;EssentialLink v-bind=&#34;setupLink&#34; /&gt; --&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">q-separator</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">EssentialLink</span> <span class="na">v-bind</span><span class="o">=</span><span class="s">&#34;helpLink&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">q-separator</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">EssentialLink</span> <span class="na">v-bind</span><span class="o">=</span><span class="s">&#34;exitLink&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">q-list</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">q-drawer</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">q-page-container</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">router-view</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">q-page-container</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">q-layout</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c">&lt;!-- Removed to keep this condensed --&gt;</span>
</span></span></code></pre></div><h3 id="using-layouts-1">Using layouts</h3>
<p>The router file will specify the layout -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="c1">// .src/router/routes.js
</span></span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">routes</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">path</span><span class="o">:</span> <span class="s2">&#34;/&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">component</span><span class="o">:</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="kr">import</span><span class="p">(</span><span class="s2">&#34;layouts/MainLayout.vue&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="nx">children</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span> <span class="nx">path</span><span class="o">:</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="nx">component</span><span class="o">:</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="kr">import</span><span class="p">(</span><span class="s2">&#34;pages/Index.vue&#34;</span><span class="p">)</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span> <span class="nx">path</span><span class="o">:</span> <span class="s2">&#34;/history&#34;</span><span class="p">,</span> <span class="nx">component</span><span class="o">:</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="kr">import</span><span class="p">(</span><span class="s2">&#34;../pages/History.vue&#34;</span><span class="p">)</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span> <span class="nx">path</span><span class="o">:</span> <span class="s2">&#34;/settings&#34;</span><span class="p">,</span> <span class="nx">component</span><span class="o">:</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="kr">import</span><span class="p">(</span><span class="s2">&#34;../pages/Settings.vue&#34;</span><span class="p">)</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">MODE</span> <span class="o">!==</span> <span class="s2">&#34;ssr&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&#34;process.env.MODE&#34;</span><span class="p">,</span> <span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">MODE</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="nx">routes</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">    <span class="nx">path</span><span class="o">:</span> <span class="s2">&#34;*&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">component</span><span class="o">:</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="kr">import</span><span class="p">(</span><span class="s2">&#34;pages/Error404.vue&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="p">});</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="k">default</span> <span class="nx">routes</span><span class="p">;</span>
</span></span></code></pre></div><p>Use these routes in your app -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="c1">// ./src/router/index.js
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="nx">Vue</span> <span class="nx">from</span> <span class="s2">&#34;vue&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="nx">VueRouter</span> <span class="nx">from</span> <span class="s2">&#34;vue-router&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="nx">routes</span> <span class="nx">from</span> <span class="s2">&#34;./routes&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">Vue</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">VueRouter</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">Router</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">VueRouter</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">    <span class="nx">scrollBehavior</span><span class="o">:</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="p">({</span> <span class="nx">x</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="mi">0</span> <span class="p">}),</span>
</span></span><span class="line"><span class="cl">    <span class="nx">routes</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">mode</span><span class="o">:</span> <span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">VUE_ROUTER_MODE</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">base</span><span class="o">:</span> <span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">VUE_ROUTER_BASE</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">Router</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>All you need to do now is to create the actual page.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="c">&lt;!-- ./src/pages/History.vue --&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">q-page</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;flex&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;q-pa-lg q-gutter-md&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;row full-height&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;col-12&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;title text-weight-bold text-subtitle text-grey mt-3 mb-5&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            View message history.
</span></span><span class="line"><span class="cl">          <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;title text-weight-bold text-h5 mt-3 mb-5&#34;</span><span class="p">&gt;</span>History<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;col-12 q-gutter-md&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">q-card</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;col col-12 col-sm-8&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">q-card-section</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;q-px-md&#34;</span> <span class="na">v-if</span><span class="o">=</span><span class="s">&#34;motor&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;row justify-around&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">                <span class="p">&lt;</span><span class="nt">q-input</span>
</span></span><span class="line"><span class="cl">                  <span class="na">class</span><span class="o">=</span><span class="s">&#34;col col-12&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">:value</span><span class="o">=</span><span class="s">&#34;motor[&#39;name&#39;]&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">label</span><span class="o">=</span><span class="s">&#34;Name&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">readonly</span>
</span></span><span class="line"><span class="cl">                <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">                <span class="p">&lt;</span><span class="nt">q-input</span>
</span></span><span class="line"><span class="cl">                  <span class="na">class</span><span class="o">=</span><span class="s">&#34;col col-12 col-md-6&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">:value</span><span class="o">=</span><span class="s">&#34;motor[&#39;phone&#39;]&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">label</span><span class="o">=</span><span class="s">&#34;Motor Phone&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">readonly</span>
</span></span><span class="line"><span class="cl">                <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">                <span class="p">&lt;</span><span class="nt">q-input</span>
</span></span><span class="line"><span class="cl">                  <span class="na">class</span><span class="o">=</span><span class="s">&#34;col col-12 col-md-6&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">:value</span><span class="o">=</span><span class="s">&#34;motor[&#39;location&#39;]&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">label</span><span class="o">=</span><span class="s">&#34;Location&#34;</span>
</span></span><span class="line"><span class="cl">                  <span class="na">readonly</span>
</span></span><span class="line"><span class="cl">                <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;/</span><span class="nt">q-card-section</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;/</span><span class="nt">q-card</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;col-12 overline text-weight-bold block text-grey-5 mt-3&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">p</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;infoText&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            You are viewing message history for your chosen device.
</span></span><span class="line"><span class="cl">          <span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">q-page</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>As you can see we did not specify the layout within the page. Things are seamlessly used in router.</p>
<h3 id="examples-1">Examples</h3>
<p>Find the complete example on <a href="https://github.com/pragital/mostart">Mostart: an app for SMS automation</a>.</p>
<h2 id="end-word">End Word</h2>
<p>There is no &ldquo;better option&rdquo; amongst these IMO.</p>
<p>I personally like the Vuetify option better -</p>
<ol>
<li>Keep things in control - see related components in one place</li>
<li>Multiple, dynamic layouts based on data is easy to implement and comprehend</li>
</ol>
<p>Nothing in Quasar prevents us from having the same layout style as in Vuetify, but the framework does provide a clean abstraction for standard applications and UI structure.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Apply Vue Style Dynamically</title>
      <link>https://techformist.com/apply-vue-style-dynamically/</link>
      <pubDate>Sun, 30 Dec 2018 08:11:00 +0000</pubDate>
      
      <guid>https://techformist.com/apply-vue-style-dynamically/</guid>
      <description>&lt;p&gt;I have been using Vue and Vuetify quite a bit and absolutely loving it. The combination alongside some of the backend Javascript frameworks (like AdonisJS, Strapi) make web app building fast and fun.&lt;/p&gt;
&lt;p&gt;In this post let&amp;rsquo;s take a look at how we can dynamically style elements by using data to drive styling.&lt;/p&gt;
&lt;h3 id=&#34;an-example-with-data-tables&#34;&gt;An Example with Data tables&lt;/h3&gt;
&lt;p&gt;One of the common factors in all my data-driven applications is the data table. Looking back one of the primary factors for choosing Vuetify may be its powerful data table. I just need to supply a dataset and with the power of Vue, I have a super user-friendly table.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have been using Vue and Vuetify quite a bit and absolutely loving it. The combination alongside some of the backend Javascript frameworks (like AdonisJS, Strapi) make web app building fast and fun.</p>
<p>In this post let&rsquo;s take a look at how we can dynamically style elements by using data to drive styling.</p>
<h3 id="an-example-with-data-tables">An Example with Data tables</h3>
<p>One of the common factors in all my data-driven applications is the data table. Looking back one of the primary factors for choosing Vuetify may be its powerful data table. I just need to supply a dataset and with the power of Vue, I have a super user-friendly table.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">v-toolbar</span> <span class="na">flat</span> <span class="na">dense</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-spacer</span><span class="p">&gt;&lt;/</span><span class="nt">v-spacer</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">v-btn</span> <span class="na">outline</span> <span class="na">small</span> <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;viewItemDetail({})&#34;</span><span class="p">&gt;</span>View<span class="p">&lt;/</span><span class="nt">v-btn</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">v-toolbar</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">v-data-table</span>
</span></span><span class="line"><span class="cl">      <span class="na">:headers</span><span class="o">=</span><span class="s">&#34;headers&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">:items</span><span class="o">=</span><span class="s">&#34;records[&#39;data&#39;]&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">:loading</span><span class="o">=</span><span class="s">&#34;loading&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">hide-actions</span>
</span></span><span class="line"><span class="cl">    <span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">template</span> <span class="na">slot</span><span class="o">=</span><span class="s">&#34;items&#34;</span> <span class="na">slot-scope</span><span class="o">=</span><span class="s">&#34;props&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">tr</span> <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;setActiveRecord(props.item)&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ props.item.id }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ props.item.created_at }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ props.item.name }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ props.item.status_cd }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ props.item.description }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">tr</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">v-data-table</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>A typical requirement in a data table is the ability to show users the record that they select for an action.</p>
<p>For e.g. click on record and click &lsquo;Print Report&rsquo; button to print a report, or click on record to view details in a detail tab.</p>
<p>Calling an action is quite straight-forward. In the example you will see -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">tr</span> <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;setActiveRecord(props.item)&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">tr</span><span class="p">&gt;</span>
</span></span></code></pre></div><p><code>setActiveRecord</code> may be a mutation in vuex.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="nx">setActiveRecord</span><span class="p">(</span><span class="nx">state</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">   <span class="nx">state</span><span class="p">.</span><span class="nx">activeServiceReq</span> <span class="o">=</span> <span class="nx">value</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>If it is a variable within the component, you could simply do a</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">tr</span> <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;this.activeRecord = props.item&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">tr</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>When user clicks and the activeRecord is set, we want to highlight the record. Change the <code>tr</code> tag to -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">tr</span>
</span></span><span class="line"><span class="cl">  <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;setActiveRecord(props.item)&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="na">:class</span><span class="o">=</span><span class="s">&#34;{activeRow:activeRecord[&#39;id&#39;] == props.item.id}&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">&gt;&lt;/</span><span class="nt">tr</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Include the following style in the component..</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">style</span> <span class="na">scoped</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">activeRow</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">background-color</span><span class="p">:</span> <span class="nb">rgb</span><span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Now click away on the record to glory.</p>
<h3 id="backgrounds-in-technicolour">Backgrounds in &rsquo;technicolour&rsquo;</h3>
<p>If you want to change the background color of a row in a data table or for another element, we can make the class name dynamic.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">:class</span><span class="o">=</span><span class="s">&#34;`background-${status}.toLowerCase()`&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>{{ status }}<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>And, the style will be -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">style</span> <span class="na">scoped</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">background-inactive</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">background-color</span><span class="p">:</span> <span class="nb">rgb</span><span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">background-inactive</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">background-color</span><span class="p">:</span> <span class="nb">rgb</span><span class="p">(</span><span class="mi">120</span><span class="p">,</span> <span class="mi">120</span><span class="p">,</span> <span class="mi">120</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span></code></pre></div><h3 id="conclusion">Conclusion</h3>
<p>Oh colours.. you just can&rsquo;t hate them for long.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
