<?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: Quasar</title>
    <description>The latest articles on DEV Community by Quasar (@quasar).</description>
    <link>https://dev.to/quasar</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%2Forganization%2Fprofile_image%2F1343%2F3948f11d-a070-45d0-862c-f418b8e4a5c2.png</url>
      <title>DEV Community: Quasar</title>
      <link>https://dev.to/quasar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quasar"/>
    <language>en</language>
    <item>
      <title>QuasarConf 2022 - Speakers and Schedule</title>
      <dc:creator>Scott Molinari</dc:creator>
      <pubDate>Tue, 28 Jun 2022 19:26:29 +0000</pubDate>
      <link>https://dev.to/quasar/quasarconf-2022-speakers-and-schedule-dp3</link>
      <guid>https://dev.to/quasar/quasarconf-2022-speakers-and-schedule-dp3</guid>
      <description>&lt;p&gt;&lt;em&gt;Get out your calendar, and save the date!&lt;/em&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  When will it be?
&lt;/h2&gt;

&lt;p&gt;Saturday the 9th of July, 2022 - 3 p.m. GMT&lt;/p&gt;



&lt;h2&gt;
  
  
  Where will it be?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://bit.ly/qconfstream2022" rel="noopener noreferrer"&gt;Streamed Live on Youtube (bookmark the link!)&lt;/a&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  The Speakers, Topics and Schedule
&lt;/h2&gt;

&lt;p&gt;(all times GMT)&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;Quick Welcome and Intro - 3 p.m.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt;Talk 1 - 3:05 p.m. -  Five Refactoring Tips For Gorgeous, Reusable Code&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84vttvtmba2767lrk2no.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%2F84vttvtmba2767lrk2no.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Let's make our Quasar code crystal clear and easy to follow, by breaking it into smaller pieces. Luke will show how you can truly separate concerns with little known, powerful refactoring techniques... Techniques that will have your coworkers smiling when they dive into your codebase!&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt;Talk 2 - 3:30 p.m. - Quasar and TypeScript: A Deep Dive &lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy08v4i71efun1d41pewl.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%2Fy08v4i71efun1d41pewl.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Yusuf will take us on a deep dive into Quasar's TS generation pipeline and JSON API structure. The history behind these, the progress we've made over the years, and future plans will also be covered. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt; Talk 3 - 3:55 p.m. - All is Well, When There is Quasar!&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj22gaenc08b8l4kifvn1.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%2Fj22gaenc08b8l4kifvn1.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Hari will explain how his and his team used Quasar/VueJS along with AWS &amp;amp; Feathers JS to help them in developing an academic platform in record time. He'll cover how they used the Quasar Ecosystem - and how they built up their Resume Builder, Simple CRUD User Interfaces, Social Feed and a Subscription &amp;amp; Licensing System including short demos showcasing the real world use of their use of Quasar components.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt; Talk 4 - 4:20 p.m. - Using the Composition API with TypeScript to Build Better Forms&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgj890bw576rykrrg1nb4.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%2Fgj890bw576rykrrg1nb4.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
In this talk, Bruno will cover how you can leverage the Composition API by creating composables to abstract the logic out of your forms, making that logic reusable.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt; Talk 5 - 4:45 p.m. - Quasar Themes and Theming&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&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%2F5zjqcmw3141qprx2iv1g.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%2F5zjqcmw3141qprx2iv1g.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
In the talk Bart will give you a look at the state of Quasar and theming. We'll go into the provided light and dark themes provided by Quasar and then look at how to expand into more custom themes, based on the gathered knowledge on how Quasar works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt; Talk 6 - 5:10 p.m. - Component Testing Tip &amp;amp; Tricks with Quasar&lt;/u&gt;&lt;/strong&gt;&lt;br&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%2F5uu14qb1y4y0a90m5l2o.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%2F5uu14qb1y4y0a90m5l2o.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Quasar has supported Cypress Component Testing out of the box for some months, but there are some caveats due to Quasar feature-packed components having a much more complex HTML structure than native input elements.&lt;/p&gt;

&lt;p&gt;Paolo will cover how you can add Cypress Component Testing to your Quasar project and show you some tips and tricks about testing some of the most complex Quasar components.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt;--- 20 Minute Break ---&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt; Talk 7 - 5:55 p.m. - Wrapping and Extending Quasar Components using TypeScript&lt;/u&gt;&lt;/strong&gt;&lt;br&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%2Fg4g6wt9wv11dieaj9o72.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%2Fg4g6wt9wv11dieaj9o72.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Evert will showcase 2 options on how to wrap and extend Quasar components. This can be used to set defaults for properties and use your wrapped component instead of the default Quasar one throughout your application. Of course doing all this while preserving as many TypeScript/IDE features that are currently out there, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;property autocompletion and type checking&lt;/li&gt;
&lt;li&gt;property documentation on hover&lt;/li&gt;
&lt;li&gt;typed component methods&lt;/li&gt;
&lt;li&gt;typed slots&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;br&gt;
&lt;strong&gt;&lt;u&gt; Talk 8 - 6:20 p.m. - Embedding Quasar Apps Into Lightweight Hardware&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F463cmqhoiids3g3lceu7.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%2F463cmqhoiids3g3lceu7.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Mike will cover workflow and methodology for incorporating Quasar/Vue Apps into resource constrained embedded systems hardware such as the ESP32 processor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt; Talk 9 - 6:45 p.m. - Building Engineering Tools with Quasar&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzoxmhnmgkhg9d8ug0fh1.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%2Fzoxmhnmgkhg9d8ug0fh1.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Carlos will show two examples of Quasar apps he developed as engineering tools. He'll demonstrate how Quasar helped him with the rapid development of the tools and how these benefits can also help you. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;strong&gt;&lt;u&gt; Talk 10 - 7:10 p.m. - Lessons Learned Migrating an App to Quasar and Vue3&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fczmx8dr0mivoc1ltzb6n.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%2Fczmx8dr0mivoc1ltzb6n.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
In early 2022, Martin decided to upgrade one of his side projects from Vue2+Buefy to Vue3+Quasar. His application gets hundreds of thousands of visitors per day, so he had to tread carefully. Martin's talk will go into why he made the decision to migrate, what the migration was like, and how he rolled out the new version. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;
Should you have any questions, please post them in the comments below or join us on &lt;a href="https://chat.quasar.dev" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Although we are planning to carry out the conference as advertised, the schedule is subject to change, without notice. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;
Follow us on:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/quasarframework" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.facebook.com/QuasarFramework" rel="noopener noreferrer"&gt;Facebook&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>It's Back! QuasarConf 2022 - Call for Proposals</title>
      <dc:creator>Scott Molinari</dc:creator>
      <pubDate>Mon, 23 May 2022 11:09:03 +0000</pubDate>
      <link>https://dev.to/quasar/its-back-quasarconf-2022-call-for-proposals-13mn</link>
      <guid>https://dev.to/quasar/its-back-quasarconf-2022-call-for-proposals-13mn</guid>
      <description>&lt;p&gt;We are happy to announce the comeback of our yearly online conference about all things Quasar Framework and Vue. We had success with &lt;a href="https://www.youtube.com/watch?v=6ZKBZ3k4Ebk"&gt;our first ever conference&lt;/a&gt; and we'd like to continue with what we intend to be a tradition. &lt;/p&gt;

&lt;h3&gt;
  
  
  When will it be?
&lt;/h3&gt;

&lt;p&gt;Saturday the 9th of July, 2022 - 3 p.m. GMT&lt;/p&gt;

&lt;h3&gt;
  
  
  Would you like to do a talk?
&lt;/h3&gt;

&lt;p&gt;We are looking for devs in the community, who would like to present their knowledge about anything related to Quasar and/or Vue. &lt;/p&gt;

&lt;p&gt;Your talk should go for 20 minutes max. We'll also be offering the viewers the ability to ask questions in the chat, so after the talk, we'll have a 5 minute Q&amp;amp;A with the speaker. &lt;/p&gt;

&lt;p&gt;If you are interested, &lt;a href="https://forms.gle/F8bPLG8xdtBCF2iLA"&gt;please sign up by filling out our Call for Proposals form&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is a limited number of available spaces for talks.&lt;br&gt;
Deadline for proposal acceptance is the 9th of June, 2022.  &lt;/p&gt;

&lt;h3&gt;
  
  
  What to expect?
&lt;/h3&gt;

&lt;p&gt;At our last (and first) conference 2 years ago, &lt;strong&gt;we had over 700 live viewers&lt;/strong&gt; and the video has been &lt;strong&gt;watched over 17k times&lt;/strong&gt; since then. Not too shabby for a first conference!&lt;/p&gt;

&lt;p&gt;We hope to be breaking these firsts this year and with your help, it's pretty certain we can. &lt;/p&gt;

&lt;p&gt;If you have any questions, you can either write them down below or &lt;a href="https://chat.quasar.dev"&gt;use our Discord&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;We'll be making more announcements about the conference, the participants and content in later posts. &lt;/p&gt;

&lt;p&gt;We are looking forward to your talk proposals!! &lt;/p&gt;

&lt;p&gt;If you'd like to stay in-tune with conference and other Quasar news, please follow our channels. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.facebook.com/QuasarFramework"&gt;Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/quasarframework"&gt;Twitter &lt;/a&gt;&lt;br&gt;
Follow the tag #quasarconf on Twitter &lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How To Use Google Maps In A Quasar Project</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Fri, 01 Apr 2022 23:31:15 +0000</pubDate>
      <link>https://dev.to/quasar/how-to-use-google-maps-in-a-quasar-project-1c13</link>
      <guid>https://dev.to/quasar/how-to-use-google-maps-in-a-quasar-project-1c13</guid>
      <description>&lt;p&gt;I freaking LOVE the Quasar community!&lt;/p&gt;

&lt;p&gt;One of the Quasar core team members (Yusuf) got &lt;a href="https://stackblitz.com/edit/quasarframework-ghscmc?file=src%2Fpages%2FIndexPage.vue"&gt;quasar vite working with Stackblitz&lt;/a&gt;! Amazing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now you can start a Quasar project, in your browser, in seconds!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And here's Google Maps in a Quasar Project on stackblitz:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/quasarframework-5mbs1w?ctl=1&amp;amp;embed=1&amp;amp;file=src/pages/IndexPage.vue&amp;amp;hideExplorer=1" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Anywho...&lt;/p&gt;

&lt;p&gt;A friend of mine on twitter asked how we can setup Google Maps with Quasar. So here it is!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Install &lt;a href="https://vue-map.netlify.app/docs/#install"&gt;Vue 3 Google Maps&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; @fawmi/vue-google-maps
&lt;span class="c"&gt;# or&lt;/span&gt;
yarn add @fawmi/vue-google-maps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Create a Boot File
&lt;/h2&gt;

&lt;p&gt;Vue Google Maps needs to "hook in" to Quasar. We can do this with a boot file!&lt;/p&gt;

&lt;p&gt;Diving in 🤿&lt;br&gt;
&lt;code&gt;src/boot/google-maps.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;boot&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;quasar/wrappers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;VueGoogleMaps&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@fawmi/vue-google-maps&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;boot&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;VueGoogleMaps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// 🤿 Vue App. Please install Vue Google Maps&lt;/span&gt;
    &lt;span class="na"&gt;load&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 🤿 I don't have a google key, so leave it blank for now&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Currently this file is doing... nothing. We have to tell Quasar about it, so add the following to&lt;br&gt;
&lt;code&gt;quasar.config.js&lt;/code&gt; for vite, or &lt;code&gt;quasar.conf.js&lt;/code&gt; for webpack&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="cm"&gt;/* ctx */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//...&lt;/span&gt;
    &lt;span class="na"&gt;boot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google-maps&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// 🤿 Quasar, please run this bootfile at startup!&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that it's important to be polite to Quasar when writing comments.&lt;/p&gt;

&lt;p&gt;Google Maps should now be installed!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create a map components
&lt;/h2&gt;

&lt;p&gt;Let's dive into &lt;code&gt;IndexPage.vue&lt;/code&gt; and add in our map component to check everything is working!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;q-page&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"height: calc(100vh - 50px)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- 🤿 Vue, please render the Google Map Component here --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;GMapMap&lt;/span&gt;
        &lt;span class="na"&gt;:center=&lt;/span&gt;&lt;span class="s"&gt;"center"&lt;/span&gt;
        &lt;span class="na"&gt;:zoom=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/q-page&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;center&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;51.093048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;6.84212&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;done!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now let's take a squiz at a fuller example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;q-page&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"height: calc(100vh - 50px)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;GMapMap&lt;/span&gt;
        &lt;span class="na"&gt;:center=&lt;/span&gt;&lt;span class="s"&gt;"center"&lt;/span&gt;
        &lt;span class="na"&gt;:zoom=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;
        &lt;span class="na"&gt;map-type-id=&lt;/span&gt;&lt;span class="s"&gt;"terrain"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;GMapCluster&lt;/span&gt; &lt;span class="na"&gt;:zoomOnClick=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;GMapMarker&lt;/span&gt;
            &lt;span class="na"&gt;:key=&lt;/span&gt;&lt;span class="s"&gt;"index"&lt;/span&gt;
            &lt;span class="na"&gt;v-for=&lt;/span&gt;&lt;span class="s"&gt;"(m, index) in markers"&lt;/span&gt;
            &lt;span class="na"&gt;:position=&lt;/span&gt;&lt;span class="s"&gt;"m.position"&lt;/span&gt;
            &lt;span class="na"&gt;:clickable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
            &lt;span class="na"&gt;:draggable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
            &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"center = m.position"&lt;/span&gt;
          &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/GMapCluster&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/GMapMap&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/q-page&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;center&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;51.093048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;6.84212&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;markers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;51.093048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;6.84212&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;51.198429&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;6.69529&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;51.165218&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;7.067116&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;51.09256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;6.84074&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that my fine coding friends is how you add Google Maps to a Quasar project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things before I go!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. QuasarCast.Com
&lt;/h3&gt;

&lt;p&gt;Want to &lt;a href="https://quasarcast.com/register"&gt;learn Quasar&lt;/a&gt; with videos, presented by someone who &lt;a href="https://quasarcast.com/register"&gt;LOVES to code&lt;/a&gt;! Someone who believes in you, and wants to see you &lt;a href="https://quasarcast.com/register"&gt;build GORGEOUS sites with Quasar&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Wack &lt;a href="https://quasarcast.com/register"&gt;this link&lt;/a&gt; and make yourself an account at &lt;a href="https://quasarcast.com/register"&gt;QuasarCast.Com&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Always Remember
&lt;/h3&gt;

&lt;p&gt;Especially when times are tough and you feel like your code just won't work.&lt;/p&gt;

&lt;p&gt;If you keep at it,&lt;/p&gt;

&lt;p&gt;You can build anything...&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vue</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Quasar and Vite - Frontend Application Development at Light Speed</title>
      <dc:creator>Scott Molinari</dc:creator>
      <pubDate>Mon, 14 Mar 2022 19:50:22 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-and-vite-frontend-application-development-at-light-speed-1b4f</link>
      <guid>https://dev.to/quasar/quasar-and-vite-frontend-application-development-at-light-speed-1b4f</guid>
      <description>&lt;p&gt;This week notes the accomplishment of a major milestone in Quasar's roadmap. The integration of Vite as a driver of the Quasar CLI, and as a much better alternative to the slower and more complicated Webpack based CLI. &lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Introduction Video
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tql0omvnoXg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Vite?
&lt;/h2&gt;

&lt;p&gt;If you haven't heard about Vite yet and why it is so good, Vite has the following main selling points:&lt;/p&gt;

&lt;p&gt;(from the &lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite docs&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A dev server that provides rich feature enhancements over native ES modules, for example extremely fast Hot Module Replacement (HMR).&lt;/p&gt;

&lt;p&gt;A build command that bundles your code with Rollup, pre-configured to output highly optimized static assets for production.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In other words, the main goal Evan You (creator of Vue) had for creating Vite (pronounced like veet) was to majorly improve the developer experience. He saw that the current process of bundling and then loading the application into the browser and developing with Hot-Module-Replacement (HMR) could be improved upon with the new ES Module resolution system available in all browsers. &lt;/p&gt;

&lt;p&gt;That is the TLDR version. &lt;a href="https://vitejs.dev/guide/why.html#slow-server-start" rel="noopener noreferrer"&gt;If you'd like, you can also read the much more technical reasons.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Bottom line, the avoidance of the bundling or packing step for the initial build, also during HMR, saves a ton of time, even with the smallest of projects (see below). But, this advantage is especially noticeable, once your project gets even remotely bigger.&lt;/p&gt;

&lt;h4&gt;
  
  
  Initial Loading of a new Quasar project with Webpack
&lt;/h4&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%2Fi.imgur.com%2Fu76c6Sg.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%2Fi.imgur.com%2Fu76c6Sg.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Initial Loading of a new Quasar project with Vite
&lt;/h4&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%2Fi.imgur.com%2FqZOPsVv.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%2Fi.imgur.com%2FqZOPsVv.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ok. The difference with an initial project isn't so predominant, but it is there. Think about this though. Once your project starts growing, the Vite-based CLI's performance in building your app stays about the same or will only slow a little for the initial startup. The Webpack performance will degrade much worse as your project size grows. In other words, what you see here as the initial startup speed is about what you'll have for any size project. On top of that, any updates from HMR will be instantaneous with Vite. With Webpack, this performance also degrades with the size of your project.&lt;/p&gt;

&lt;p&gt;It was clear to the team instantly, when Vite came out, that Quasar would need to integrate it. So, it wasn't a matter of "If", but rather "When?". It was just a matter of time, dev availability with Razvan and our prerogatives for it to happen. Our first major goal was to get Quasar onto Vue 3. That happened last year. All the while, Vite was getting better and more stable. And this year, Quasar now has a Vite based CLI. &lt;/p&gt;

&lt;p&gt;How cool is that? 🤩 &lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;If you'd like to just get started with Vite in a new project, all you have to do is run...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yarn create quasar
&lt;span class="c"&gt;# or:&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;npm init quasar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The command &lt;code&gt;quasar create&lt;/code&gt; is no longer usable for a Quasar project with the new CLI (&amp;gt;1.3.0). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;NOTE2: the Vite CLI was still in BETA at the time this article was published. So, it is not production ready, if it is still in beta or RC status!!!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While running the command above, the creation process will pose question to you for the project creation. Answer the questions as best you can. Hit enter for the defaults (except for the Vite CLI), if you are uncertain what to answer. Once the creation process is done, navigate to the newly created project folder and run...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;quasar dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And off you go.. with Lightning fast development at your fingertips!!! &lt;/p&gt;

&lt;h3&gt;
  
  
  Migration
&lt;/h3&gt;

&lt;p&gt;Maybe you have a Quasar project and wish to move it to the new Vite CLI. If that is the case, then let's get you up to.....Vite, &lt;a href="https://quasar.dev/quasar-cli-vite/convert-to-quasar-cli-with-vite" rel="noopener noreferrer"&gt;with the official migration guide.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Roughly, the migration guide takes you through the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new project with the newest version of the (global) Quasar CLI&lt;/li&gt;
&lt;li&gt;Copy specific folders into the new project from your old project, also doing some small edits on specific files.&lt;/li&gt;
&lt;li&gt;Update the &lt;code&gt;quasar.config.js&lt;/code&gt; file notice it's changes from &lt;code&gt;quasar-conf.js&lt;/code&gt;) with the new settings, should you need them.&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;package.json&lt;/code&gt; to remove the &lt;code&gt;browserlist&lt;/code&gt; entry (if you want). It is no longer valid and not needed, at least for Vite. &lt;/li&gt;
&lt;li&gt;Delete a folder for SSR and move another. &lt;/li&gt;
&lt;li&gt;For PWA, you'll need to move your manifest to &lt;code&gt;quasar.config.js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you are using BEX mode, you'll also need to port over your manifest files manually. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, not too much work necessary to get a much better DX. &lt;/p&gt;

&lt;p&gt;Again, more details can be found in the &lt;a href="https://quasar.dev/quasar-cli-vite/convert-to-quasar-cli-with-vite" rel="noopener noreferrer"&gt;migration guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  That's it!
&lt;/h3&gt;

&lt;p&gt;Let us know in the comments about what you think! Is Vite with Quasar awesome or what?&lt;/p&gt;

&lt;p&gt;Keep in touch with Quasar news. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.quasar.dev/" rel="noopener noreferrer"&gt;Quasar on Twitter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://facebook.quasar.dev/" rel="noopener noreferrer"&gt;Quasar on Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://chat.quasar.dev/" rel="noopener noreferrer"&gt;Quasar on Discord&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/quasarframework" rel="noopener noreferrer"&gt;Quasar on Github&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Modeling Data In Quasar Like A BOOOSS With VuexOrm</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Mon, 07 Feb 2022 22:23:07 +0000</pubDate>
      <link>https://dev.to/quasar/modeling-data-in-quasar-like-a-boooss-with-vuexorm-45mh</link>
      <guid>https://dev.to/quasar/modeling-data-in-quasar-like-a-boooss-with-vuexorm-45mh</guid>
      <description>&lt;p&gt;It's hard to express the impact &lt;a href="https://vuex-orm.org/"&gt;VuexOrm&lt;/a&gt; has had on my career as a developer.&lt;/p&gt;

&lt;p&gt;It's fundamentally changed the way I deal with data on the frontend! At Agripath (where I work), &lt;strong&gt;we almost NEVER deal with the store directly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most interactions with the store are done with &lt;a href="https://vuex-orm.org/"&gt;VuexOrm&lt;/a&gt;, which gives us a &lt;strong&gt;gorgeous&lt;/strong&gt; API. Stuff like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;models/User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Post&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;models/Post&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;indexPosts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;orderBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rating&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;comments.user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that code doesn't excite you, either read it again or check your pulse!&lt;/p&gt;

&lt;p&gt;Take a look at &lt;a href="https://www.youtube.com/watch?v=D0bOiA7uxZI&amp;amp;list=PLFZAa7EupbB5-MLdEuVP8jXW2WADpvI39&amp;amp;index=1"&gt;VuexORM video series&lt;/a&gt; to find out more, and learn VuexOrm!&lt;/p&gt;

&lt;h2&gt;
  
  
  VuexORM App Extension (AE)
&lt;/h2&gt;

&lt;p&gt;Truth be told, it doesn't take too much work to setup VuexOrm with Quasar. However, there are a few things we can do to streamline the setup. Here's some of the features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Auto import and register models to the "VuexOrm database"!&lt;/li&gt;
&lt;li&gt;Easily create new models using Quasar's cli&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;models&lt;/code&gt; alias already registered for you&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once &lt;a href="https://github.com/ldiebold/quasar-app-extension-vuex-orm"&gt;everything is setup&lt;/a&gt;, all you have to do to add a new model is run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;quasar run vuex-orm new:model Todo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you're ready to &lt;code&gt;insert&lt;/code&gt;, &lt;code&gt;find&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt; etc Todo's to your hearts content!&lt;/p&gt;

&lt;h2&gt;
  
  
  Give It A Try
&lt;/h2&gt;

&lt;p&gt;Ready to take VuexORM for a spin? Take a look at the &lt;a href="https://github.com/ldiebold/quasar-app-extension-vuex-orm"&gt;VuexOrm App Extension GitHub page&lt;/a&gt; and let me know how it goes!&lt;/p&gt;

&lt;p&gt;And remember,&lt;/p&gt;

&lt;p&gt;You can build anything...&lt;/p&gt;

</description>
      <category>vue</category>
      <category>quasarframework</category>
      <category>javascript</category>
      <category>laravel</category>
    </item>
    <item>
      <title>Quasar "Nuxt-like" Routing is here!</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Mon, 07 Feb 2022 12:49:41 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-nuxt-like-routing-is-here-2npn</link>
      <guid>https://dev.to/quasar/quasar-nuxt-like-routing-is-here-2npn</guid>
      <description>&lt;p&gt;Ever wanted auto-routing in Quasar? Kinda like Nuxt?&lt;br&gt;
Well now it's possible with Quasar &lt;a href="https://github.com/ldiebold/quasar-app-extension-auto-routing"&gt;auto-routing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get started:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;quasar ext add auto-routing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And use the generated routes in your &lt;code&gt;routes.js&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;autoRouting&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./auto-routing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// 💥&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;autoRouting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 💥&lt;/span&gt;

  &lt;span class="c1"&gt;// Always leave this as last one,&lt;/span&gt;
  &lt;span class="c1"&gt;// but you can also remove it&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/:catchAll(.*)*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pages/Error404.vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/ldiebold/quasar-app-extension-auto-routing"&gt;Find out more on the github repo!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is still new, so feedback/PRs most welcome!&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank You ktsn...
&lt;/h2&gt;

&lt;p&gt;And a MASSIVE thankyou to the following libraries:&lt;br&gt;
&lt;a href="https://github.com/ktsn/vue-route-generator"&gt;vue-route-generator&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ktsn/vue-router-layout"&gt;vue-router-layout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quasar Auto Routing is basically just "sticky tape" for these two libraries so 99% of the work is not my own!&lt;/p&gt;

&lt;p&gt;That's all for this but before I go remember,&lt;/p&gt;

&lt;p&gt;You can build anything...&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>quasarframewor</category>
      <category>nuxt</category>
    </item>
    <item>
      <title>Quasar's QTable: The ULTIMATE Component (5/6) - Styling EVERYTHING!!!</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Fri, 20 Aug 2021 12:33:51 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-5-6-styling-everything-4l62</link>
      <guid>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-5-6-styling-everything-4l62</guid>
      <description>&lt;p&gt;Welcome back my fine devy friend!&lt;/p&gt;

&lt;p&gt;When I started on this post, I had &lt;strong&gt;no idea what I was in for&lt;/strong&gt;...&lt;/p&gt;

&lt;p&gt;My girlfriend is in the other room, watching a Korean drama, drinking soju (and I LOVE soju).&lt;/p&gt;

&lt;p&gt;"1 and a half hours" I told her. When will I learn! &lt;strong&gt;Quasar's &lt;code&gt;QTable&lt;/code&gt; is relentlessly useful&lt;/strong&gt;, and to show you all of it's inner powers takes time!&lt;/p&gt;

&lt;p&gt;Anywho..&lt;/p&gt;

&lt;p&gt;You'll &lt;strong&gt;love&lt;/strong&gt; this one!&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Becuase styling &lt;code&gt;q-table&lt;/code&gt; is easy! All it takes is a sprinkle of props here and there.&lt;/p&gt;

&lt;p&gt;Having said that, there are &lt;strong&gt;two ways to style &lt;code&gt;q-table&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;props&lt;/li&gt;
&lt;li&gt;slots&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I recommend using &lt;strong&gt;props&lt;/strong&gt; where possible (and they're what we'll cover in this post), since they're &lt;em&gt;easier to write, and eaiser to read&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Have You STILL Not Checkerty Checked Out &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com?&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you've come this far into the series and &lt;strong&gt;still&lt;/strong&gt; haven't been to &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt;, then &lt;strong&gt;what the HEY???&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;Head. There. Now.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have something &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;&lt;strong&gt;really cool&lt;/strong&gt;&lt;/a&gt; to show you!&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Ok, let's get started...&lt;/p&gt;

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

&lt;p&gt;Here's &lt;a href="https://github.com/ldiebold/q-table-blog" rel="noopener noreferrer"&gt;le github repo&lt;/a&gt; ("le github repo" is French for "I don't speak French")&lt;/p&gt;

&lt;p&gt;Now &lt;strong&gt;SLAM&lt;/strong&gt; this into your editor!&lt;/p&gt;

&lt;p&gt;Let's do that thing again where I dive into the code and meet you in there 🤿&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="c1"&gt;// 🤿 Quasar has some rad color utilities!&lt;/span&gt;
&lt;span class="c1"&gt;// We'll use "getPaletteColor" in one of the examples.&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;quasar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getPaletteColor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt;

&lt;span class="c1"&gt;// 🤿 did saying "rad" up my street cred? I hope so.&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setup &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// three guesses at what we'll use this for...&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fullscreen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Panda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;panda@chihuahua.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lily&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lily@chihuahua.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Moe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;moe@rip.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Avo Cado&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;free@shivacadoo.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Oscar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;oscar@comehome.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;// 🤿 Oh look, a fish! 🐠&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;columnsStyled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;fullscreen&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;emerges from code&lt;/em&gt; 🤿&lt;/p&gt;

&lt;p&gt;Did that all make sense?&lt;/p&gt;

&lt;p&gt;Sweet! Let's start making some &lt;strong&gt;sexy tables&lt;/strong&gt;...&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;dense&lt;/code&gt;, &lt;code&gt;dark&lt;/code&gt; and &lt;code&gt;flat&lt;/code&gt;
&lt;/h2&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"green"&lt;/span&gt;
  &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
  &lt;span class="na"&gt;dense&lt;/span&gt;
  &lt;span class="na"&gt;dark&lt;/span&gt;
  &lt;span class="na"&gt;flat&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fs0g34Td.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%2Fi.imgur.com%2Fs0g34Td.png" alt="Quasar Vue QTable Color, Dense, Dark and Flat"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You know what a lot of people don't like about material design? The shadows.&lt;/p&gt;

&lt;p&gt;Well guess what... Quasar makes it &lt;strong&gt;EASY to remove the shadow&lt;/strong&gt; from all of its components with either &lt;code&gt;flat&lt;/code&gt; or &lt;code&gt;unelevated&lt;/code&gt;. As you can see in the above example, &lt;code&gt;QTable&lt;/code&gt; ain't no exception 🙃&lt;/p&gt;

&lt;p&gt;&lt;code&gt;color&lt;/code&gt; changes the &lt;strong&gt;loading bar color&lt;/strong&gt;, and the &lt;strong&gt;selected item in pagination&lt;/strong&gt; and...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dense&lt;/code&gt; tightens things up. Great for when you have a large amount of data to show!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;bordered&lt;/code&gt;, &lt;code&gt;flat&lt;/code&gt;, &lt;code&gt;square&lt;/code&gt; (Cleancut)
&lt;/h2&gt;

&lt;p&gt;I call this the "Cleancut" design. It makes the table look slick and professional:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;bordered&lt;/span&gt;
  &lt;span class="na"&gt;flat&lt;/span&gt;
  &lt;span class="na"&gt;square&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F0c8gg0X.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%2Fi.imgur.com%2F0c8gg0X.png" alt="Quasar Vue QTable Bordered, Flat, Square (Cleancut)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See what I mean? It's like the "James Bond" of table design 😎&lt;/p&gt;

&lt;p&gt;try removing the &lt;code&gt;border&lt;/code&gt;. You'll notice that the table stands completely on its own without a border in this example!&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%2Fi.imgur.com%2FlMszHHN.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%2Fi.imgur.com%2FlMszHHN.png" alt="Quasar Vue QTable No Border Or Shadow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Specific Classes and Styles
&lt;/h2&gt;

&lt;p&gt;These little helper props are awesome! &lt;strong&gt;Usually, they're all you'll need&lt;/strong&gt; for designing your table:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Blue Chihuahua's"&lt;/span&gt;
  &lt;span class="na"&gt;title-class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold text-blue-9"&lt;/span&gt;
  &lt;span class="na"&gt;table-class=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-9 text-white"&lt;/span&gt;
  &lt;span class="na"&gt;table-style=&lt;/span&gt;&lt;span class="s"&gt;"border: 3px solid black;"&lt;/span&gt;
  &lt;span class="na"&gt;table-header-style=&lt;/span&gt;&lt;span class="s"&gt;"height: 65px;"&lt;/span&gt;
  &lt;span class="na"&gt;table-header-class=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-8"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F9D0xReM.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%2Fi.imgur.com%2F9D0xReM.png" alt="Quasar Vue QTable Targeting Specific Classes And Styles"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice we can target the&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Header&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nice! 😊&lt;/p&gt;

&lt;h2&gt;
  
  
  Specific Column Classes and Styles
&lt;/h2&gt;

&lt;p&gt;Now THIS is something I use all the time. &lt;strong&gt;The columns object itself&lt;/strong&gt; can be tapped into so we can change the styling of &lt;strong&gt;columns&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Razvan (creator of Quasar) must have been in some sort of next level zen state when he was designing this &lt;strong&gt;work of art&lt;/strong&gt;!&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
    &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
    &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columnsStyled"&lt;/span&gt;
    &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setup &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Add this in&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columnsStyled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bg-pink-1 text-bold&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.2em&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;borderLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`6px solid &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;getPaletteColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pink-4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;headerClasses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bg-grey-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;headerStyle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.2em&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;headerClasses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bg-grey-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bg-pink-2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;headerClasses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bg-grey-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bg-pink-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// And this&lt;/span&gt;
      &lt;span class="nx"&gt;columnsStyled&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fmc03KSn.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%2Fi.imgur.com%2Fmc03KSn.png" alt="Quasar Vue QTable Targeting Specific Classes And Styles On Column Objects"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How. Cool. Is. &lt;strong&gt;THAT!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To summarise, the &lt;strong&gt;column options&lt;/strong&gt; we're using here are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;classes&lt;/li&gt;
&lt;li&gt;style&lt;/li&gt;
&lt;li&gt;headerClasses&lt;/li&gt;
&lt;li&gt;headerStyle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sure, the example looks a little messed up... But you're not here to get a degree as an artist 🎨 (nor are you likely to get one from me).&lt;/p&gt;

&lt;h2&gt;
  
  
  Pagination
&lt;/h2&gt;

&lt;p&gt;Dealing with pagination and slots can get pretty complicated... Luckily, it's likely we can solve our &lt;strong&gt;pagination styling problems&lt;/strong&gt; with these handy dandy props!&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;:rows-per-page-options=&lt;/span&gt;&lt;span class="s"&gt;"[2, 0]"&lt;/span&gt;
  &lt;span class="na"&gt;rows-per-page-label=&lt;/span&gt;&lt;span class="s"&gt;"records/page"&lt;/span&gt;
  &lt;span class="na"&gt;icon-first-page=&lt;/span&gt;&lt;span class="s"&gt;"home"&lt;/span&gt;
  &lt;span class="na"&gt;icon-last-page=&lt;/span&gt;&lt;span class="s"&gt;"all_inclusive"&lt;/span&gt;
  &lt;span class="na"&gt;icon-next-page=&lt;/span&gt;&lt;span class="s"&gt;"arrow_right"&lt;/span&gt;
  &lt;span class="na"&gt;icon-prev-page=&lt;/span&gt;&lt;span class="s"&gt;"arrow_left"&lt;/span&gt;
  &lt;span class="na"&gt;:pagination-label=&lt;/span&gt;&lt;span class="s"&gt;"(firstRowIndex, endRowIndex, totalRowsNumber) =&amp;gt; {
    return `page ${endRowIndex}/${totalRowsNumber}`
  }"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F4ybkFAV.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%2Fi.imgur.com%2F4ybkFAV.png" alt="Quasar Vue QTable Styling Pagination"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The cool one to note here, is &lt;code&gt;pagination-label&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;pagination-label&lt;/code&gt;, we can even change the way we display the "status" of our current pagination with a simple function!&lt;/p&gt;

&lt;h2&gt;
  
  
  Hiding Header Row and Bottom (Pure Table)
&lt;/h2&gt;

&lt;p&gt;Sometimes you just want a plain ol table. No heading, no footer, no pagination... Just a "basic as can be" table.&lt;/p&gt;

&lt;p&gt;This is how we can do it with &lt;code&gt;QTable&lt;/code&gt;:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;hide-header&lt;/span&gt;
  &lt;span class="na"&gt;hide-bottom&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FVgsKgI5.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%2Fi.imgur.com%2FVgsKgI5.png" alt="Quasar Vue QTable Hiding The Header And Bottom (Pure Table)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all I have to say on that 🤷&lt;/p&gt;

&lt;h2&gt;
  
  
  Hiding Pagination (may auto remove bottom)
&lt;/h2&gt;

&lt;p&gt;Often, we don't even need pagination. Let's just hide it:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;hide-pagination&lt;/span&gt;
  &lt;span class="na"&gt;:rows-per-page-options=&lt;/span&gt;&lt;span class="s"&gt;"[0]"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FCqrYHol.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%2Fi.imgur.com%2FCqrYHol.png" alt="Quasar Vue QTable Hiding Pagination"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt;&lt;br&gt;
hiding pagination &lt;strong&gt;does not remove pagination functionality&lt;/strong&gt;. In other words, you might only see 5/10 rows of data, and have no way of viewing the rest of it (since pagination controls are hidden)!&lt;/p&gt;

&lt;p&gt;That's why we added &lt;code&gt;:rows-per-page-options="[0]"&lt;/code&gt; in the above example.&lt;/p&gt;

&lt;p&gt;You may remember from the post on pagination, &lt;strong&gt;0&lt;/strong&gt; means &lt;strong&gt;all&lt;/strong&gt;. So essentially, that code is ensuring that we &lt;strong&gt;show ALL rows&lt;/strong&gt; since the pagination is hidden.&lt;/p&gt;

&lt;p&gt;Also, if there is &lt;strong&gt;nothing else to show in the bottom row&lt;/strong&gt;, no bottom row will show at all (like in the example)&lt;/p&gt;

&lt;h2&gt;
  
  
  Hiding &lt;code&gt;no-data&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;I can't think of a good reason to do this, but of course, Quasar makes it possible to hide the default "no data" message...&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"[]"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;hide-no-data&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FoPYHIIj.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%2Fi.imgur.com%2FoPYHIIj.png" alt="Quasar Vue QTable Hiding No Data Message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nothin but header now!&lt;/p&gt;

&lt;h2&gt;
  
  
  Visible Columns
&lt;/h2&gt;

&lt;p&gt;Maybe I should have put this furthur up the list since it's &lt;strong&gt;So HANDY!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can &lt;strong&gt;easily&lt;/strong&gt; hide columns with the &lt;code&gt;visible-columns&lt;/code&gt; prop:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;:visible-columns=&lt;/span&gt;&lt;span class="s"&gt;"['name', 'age']"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FX7bU4ko.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%2Fi.imgur.com%2FX7bU4ko.png" alt="Quasar Vue QTable Hiding And Showing Columns"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that the &lt;strong&gt;strings in the &lt;code&gt;visible-columns&lt;/code&gt; array&lt;/strong&gt;, need to be the same as the &lt;code&gt;name&lt;/code&gt; prop on the corresponding &lt;code&gt;columns&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;Erg, that was a mouthful... Might need to read it a few times!&lt;/p&gt;

&lt;p&gt;In some of my apps, we use a &lt;code&gt;q-menu&lt;/code&gt; on the top row, and allow people to toggle columns on and off using a menu! This is easy to do with &lt;code&gt;visible-columns&lt;/code&gt;! Maybe that could be another blog post 🤔&lt;/p&gt;

&lt;h2&gt;
  
  
  Fullscreen
&lt;/h2&gt;

&lt;p&gt;"&lt;strong&gt;WHAT!!??&lt;/strong&gt; Quasar's &lt;code&gt;QTable&lt;/code&gt; supports &lt;strong&gt;FULL SCREEN!!??&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;Yes. It does 😉&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;:fullscreen=&lt;/span&gt;&lt;span class="s"&gt;"fullscreen"&lt;/span&gt;
  &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"dogs"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#top-right&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-btn&lt;/span&gt;
      &lt;span class="na"&gt;dense&lt;/span&gt;
      &lt;span class="na"&gt;flat&lt;/span&gt;
      &lt;span class="na"&gt;icon=&lt;/span&gt;&lt;span class="s"&gt;"fullscreen"&lt;/span&gt;
      &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"fullscreen = !fullscreen"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fo9s61cd.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%2Fi.imgur.com%2Fo9s61cd.png" alt="Quasar Vue QTable Fullscreen Mode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, we added a button on the &lt;code&gt;#top-right&lt;/code&gt; that &lt;strong&gt;toggles fullscreen on and off.&lt;/strong&gt; Piece of cake 🍰&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;separator&lt;/code&gt; and &lt;code&gt;wrap-cells&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;By default, every &lt;code&gt;QTable&lt;/code&gt; row is divided with a horizontal line. Of course, we can change this to either a &lt;code&gt;vertical&lt;/code&gt; line, or a full &lt;code&gt;cell&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In this example, we're also demonstrating &lt;code&gt;wrap-cells&lt;/code&gt;. &lt;code&gt;wrap-cells&lt;/code&gt; is handy, as it ensures that long text wraps correctly in a cell! Note that it's only evident for &lt;strong&gt;"Avo Cado"&lt;/strong&gt;&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;separator=&lt;/span&gt;&lt;span class="s"&gt;"cell"&lt;/span&gt;
  &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 300px;"&lt;/span&gt;
  &lt;span class="na"&gt;wrap-cells&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FHG7rN3G.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%2Fi.imgur.com%2FHG7rN3G.png" alt="Quasar Vue QTable Separators, Cell, Vertical, Horizontal and Wrapping Text In Cells"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Possible options for &lt;code&gt;separator&lt;/code&gt; are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;horizontal&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vertical&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cell&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;none&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moving on!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;no-data&lt;/code&gt; Label
&lt;/h2&gt;

&lt;p&gt;Change the default &lt;code&gt;no-data&lt;/code&gt; label:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"[]"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;no-data-label=&lt;/span&gt;&lt;span class="s"&gt;"I can't find any data 😞"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F3UvxXLz.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%2Fi.imgur.com%2F3UvxXLz.png" alt="Quasar Vue QTable Changing The No Data Label"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;loading-data&lt;/code&gt; Label
&lt;/h2&gt;

&lt;p&gt;And the default &lt;code&gt;loading-data&lt;/code&gt; label:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"[]"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
  &lt;span class="na"&gt;loading-label=&lt;/span&gt;&lt;span class="s"&gt;"Gimme a sec and I'll fetch ya data!"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FRAS3Hqi.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%2Fi.imgur.com%2FRAS3Hqi.png" alt="Quasar Vue QTable Changing The Loading Data Label"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Grid Mode
&lt;/h2&gt;

&lt;p&gt;I'll be honest, I've never in my life used grid mode (until writing this blog post).&lt;/p&gt;

&lt;p&gt;But some people love it, so here ya go!&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;grid&lt;/span&gt;
  &lt;span class="na"&gt;card-class=&lt;/span&gt;&lt;span class="s"&gt;"bg-indigo-9 text-white"&lt;/span&gt;
  &lt;span class="na"&gt;card-style=&lt;/span&gt;&lt;span class="s"&gt;"padding: 22px;"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FoHA7Xzb.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%2Fi.imgur.com%2FoHA7Xzb.png" alt="Quasar Vue QTable Grid Mode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, we're also tapping into the styling of the grid cards!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;no-hover&lt;/code&gt; (&lt;code&gt;q-td&lt;/code&gt; and &lt;code&gt;q-tr&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Last, and maybe least, we can &lt;strong&gt;remove the default "highlight" effect&lt;/strong&gt; we get with &lt;code&gt;QTable&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;These are specific to &lt;code&gt;q-td&lt;/code&gt; and &lt;code&gt;q-tr&lt;/code&gt;, so we'll have to demonstrate this using the &lt;code&gt;#body&lt;/code&gt; template...&lt;/p&gt;

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

&amp;lt;q-table
  :rows="rows"
  :columns="columns"
  row-key="id"
&amp;gt;
  &amp;lt;template #body="props"&amp;gt;
    &amp;lt;q-tr
      no-hover
      :props="props"
    &amp;gt;
      &amp;lt;q-td
        key="name"
        no-hover
        :props="props"
      &amp;gt;
        {{ props.row.name }}
      &amp;lt;/q-td&amp;gt;

      &amp;lt;q-td
        key="email"
        no-hover
        :props="props"
      &amp;gt;
        {{ props.row.email }}
      &amp;lt;/q-td&amp;gt;

      &amp;lt;q-td
        key="age"
        no-hover
        :props="props"
      &amp;gt;
        {{ props.row.age }}
      &amp;lt;/q-td&amp;gt;
    &amp;lt;/q-tr&amp;gt;
  &amp;lt;/template&amp;gt;
&amp;lt;/q-table&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FB0mGSGF.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%2Fi.imgur.com%2FB0mGSGF.png" alt="Quasar Vue QTable Removing Hover Effect"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kinda hard to tell with a picture 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  Aaand We're Done!
&lt;/h2&gt;

&lt;p&gt;So there you go! If there is anything you want to acheive with &lt;code&gt;QTable&lt;/code&gt; styling, hit me up.&lt;/p&gt;

&lt;p&gt;I feel like I've seen just about everything now, so there's a good chance I can help you out 🙂&lt;/p&gt;

&lt;p&gt;And trust me, &lt;strong&gt;you're going to want to checkout &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quasar has a &lt;strong&gt;MASSIVE&lt;/strong&gt; component library that's second to none, and I want to teach you &lt;strong&gt;&lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;All 72 Of Those Components&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading, and please dear reader. &lt;strong&gt;Please&lt;/strong&gt;...&lt;/p&gt;

&lt;p&gt;Keep this thought in your mind as you hit the pillow and drift into the night 🌙&lt;/p&gt;

&lt;p&gt;There is &lt;strong&gt;nothing&lt;/strong&gt; you can't build...&lt;/p&gt;

</description>
      <category>quasar</category>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quasar's QTable: The ULTIMATE Component (4/6) - ALL The Slots!</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Thu, 19 Aug 2021 13:19:03 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-4-6-all-the-slots-40g2</link>
      <guid>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-4-6-all-the-slots-40g2</guid>
      <description>&lt;p&gt;What's black, blue, and PACKED full of QTable slots?&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;The video version of this blog post!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/cxNvoSkeLcM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The ideal progression for customizing &lt;strong&gt;rows&lt;/strong&gt; with Quasar's &lt;code&gt;QTable&lt;/code&gt; is this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No slots&lt;/strong&gt;, only props&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;generic&lt;/strong&gt; "cell" slot (&lt;code&gt;#body-cell&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specific&lt;/strong&gt; "cell" slots (&lt;code&gt;#body-cell-[name]&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Row&lt;/strong&gt; slots (&lt;code&gt;#body&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The further down the list, the more &lt;strong&gt;flexibility&lt;/strong&gt; and &lt;strong&gt;control&lt;/strong&gt; you wield!&lt;br&gt;
The further up the list, the more &lt;strong&gt;ease&lt;/strong&gt; and abstraction.&lt;/p&gt;

&lt;p&gt;So keep that in mind! &lt;strong&gt;If slots aren't needed, don't use them&lt;/strong&gt;. They're there to offer flexibility when the defaults and props aren't enough.&lt;/p&gt;

&lt;p&gt;Make sense?&lt;/p&gt;

&lt;p&gt;Sweet! With that in mind, we'll dive in to Quasar's slots...&lt;/p&gt;

&lt;p&gt;Oh! And if you want to &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;learn all 72 of Quasar's components&lt;/a&gt; through videos, checkout &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt; 😉&lt;/p&gt;

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

&lt;p&gt;First, for all you &lt;strong&gt;git cloners&lt;/strong&gt; out there, Here's the &lt;a href="https://github.com/ldiebold/q-table-blog" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;We'll use a similar setup to past examples with a couple of additions:&lt;/p&gt;

&lt;p&gt;First, install &lt;code&gt;lodash-es&lt;/code&gt;&lt;/p&gt;

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

yarn add lodash-es


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

&lt;/div&gt;

&lt;p&gt;Why lodash-es? Because it allows us to &lt;strong&gt;import individual functions&lt;/strong&gt; easily without bringing in the THE WHOLE OF LODASH which is a &lt;strong&gt;MASSIVE&lt;/strong&gt; dependency!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ahem&lt;/em&gt;, anywho...&lt;/p&gt;

&lt;p&gt;Here's the setup:&lt;/p&gt;

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

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;copyToClipboard&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;quasar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sumBy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;meanBy&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lodash-es&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setup &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Panda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;panda@chihuahua.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lily&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lily@chihuahua.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;copyToClipboard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;sumBy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;meanBy&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;

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

&lt;/div&gt;

&lt;p&gt;Quasar comes with a handy &lt;strong&gt;copy to clipboard&lt;/strong&gt; utility function that we'll use in one of the examples.&lt;/p&gt;

&lt;p&gt;We'll also use &lt;code&gt;sumBy&lt;/code&gt; and &lt;code&gt;meanBy&lt;/code&gt; to build a &lt;strong&gt;summary row&lt;/strong&gt;, and an &lt;strong&gt;average row&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I've also used &lt;code&gt;ref&lt;/code&gt; for the columns. Usually, you shouldn't do this since columns are almost never reactive! I've done it here, because in one of the examples we'll &lt;strong&gt;make columns editable&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Okay, put on your snorkel and we'll &lt;strong&gt;dive&lt;/strong&gt; in 🤿&lt;/p&gt;

&lt;h2&gt;
  
  
  Generic Cell Slots (#body-cell)
&lt;/h2&gt;

&lt;p&gt;Want to make all cells "copyable" with the press of a button?&lt;/p&gt;

&lt;p&gt;no problem! We can use the &lt;code&gt;#body-cell&lt;/code&gt; prop for that...&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#body-cell=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-btn&lt;/span&gt;
        &lt;span class="na"&gt;flat&lt;/span&gt;
        &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt;
        &lt;span class="na"&gt;:label=&lt;/span&gt;&lt;span class="s"&gt;"props.value"&lt;/span&gt;
        &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"copyToClipboard(props.value)"&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FWfIZFhg.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%2Fi.imgur.com%2FWfIZFhg.png" alt="Customizing Quasar Table Cells With Slots"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is an easy way to &lt;strong&gt;target every cell&lt;/strong&gt;. Notice that we're passing &lt;code&gt;props&lt;/code&gt; to &lt;code&gt;q-td&lt;/code&gt;? This basically allows us to proxy "Quasar Table Cell Stuff" easily 👍&lt;/p&gt;

&lt;p&gt;Also notice we have &lt;strong&gt;access to the cells value&lt;/strong&gt; with &lt;code&gt;props.value&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;But what if we want to target &lt;strong&gt;specific&lt;/strong&gt; cells...&lt;/p&gt;

&lt;h2&gt;
  
  
  Specific Cell Slots (#body-cell-[name])
&lt;/h2&gt;

&lt;p&gt;tack on "name" and you can target any cell you like within a row.&lt;/p&gt;

&lt;p&gt;You'll likely end up using this a lot, it's very handy! It's particularly useful for a &lt;strong&gt;delete button&lt;/strong&gt; cell at the end of a row.&lt;/p&gt;

&lt;p&gt;In this example, we use it to simply alternate colors:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#body-cell-name=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-1"&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#body-cell-email=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-2"&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;
    &lt;span class="na"&gt;#body-cell-age=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-1"&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Ff3rlNKy.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%2Fi.imgur.com%2Ff3rlNKy.png" alt="Customizing Specific Quasar Table Cells With Slots"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The API for &lt;code&gt;#body-cell-[name]&lt;/code&gt; is almost identical to &lt;code&gt;#body-cell&lt;/code&gt; (Classic Quasar! amazingly consistent API 🎉)&lt;/p&gt;

&lt;h2&gt;
  
  
  Row Slots (#body) (editable cells)
&lt;/h2&gt;

&lt;p&gt;Before looking at this example, I want you to notice two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;props&lt;/code&gt; is proxied to &lt;code&gt;q-tr&lt;/code&gt; AND &lt;code&gt;q-td&lt;/code&gt;. Once again, this is important as it allows Quasar to take control over the cell for things like "hiding columns" and setting the &lt;code&gt;row-key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;We use &lt;code&gt;dense&lt;/code&gt; and &lt;code&gt;borderless&lt;/code&gt; on &lt;code&gt;q-input&lt;/code&gt;, otherwise it looks strange in a table cell!&lt;/li&gt;
&lt;/ol&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#body=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
          &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"props.row.name"&lt;/span&gt;
          &lt;span class="na"&gt;borderless&lt;/span&gt;
          &lt;span class="na"&gt;dense&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
          &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"props.row.email"&lt;/span&gt;
          &lt;span class="na"&gt;borderless&lt;/span&gt;
          &lt;span class="na"&gt;dense&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"age"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
          &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"props.row.age"&lt;/span&gt;
          &lt;span class="na"&gt;borderless&lt;/span&gt;
          &lt;span class="na"&gt;dense&lt;/span&gt;
          &lt;span class="na"&gt;input-class=&lt;/span&gt;&lt;span class="s"&gt;"text-center"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F8cYmbJ9.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%2Fi.imgur.com%2F8cYmbJ9.png" alt="Quasar QTable With Editable Cells"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Doesn't look like much does it?&lt;/p&gt;

&lt;p&gt;But take a look at that code... we're using &lt;code&gt;QInput&lt;/code&gt;'s in the cells... &lt;strong&gt;These cells are EDITABLE!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a common question in the community.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do we achieve editable cells with q-table?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;well &lt;strong&gt;that&lt;/strong&gt; my friends ☝️☝️☝️, is how 😉&lt;/p&gt;




&lt;p&gt;The rest of this blog post will be very &lt;strong&gt;example driven&lt;/strong&gt; with less eplanation.&lt;/p&gt;

&lt;p&gt;The aim is to make you aware of what's possible, so you can go to bed tonight &lt;strong&gt;dreaming of table possibilities&lt;/strong&gt;! 💤💭😶‍🌫️ (I have no idea what that second emoji is. Found it on emojifinder.com when searching for "dream")&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SO!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ready for this?&lt;/p&gt;

&lt;p&gt;Sweet! Let's go nuts!!!&lt;/p&gt;




&lt;h2&gt;
  
  
  Header Cell Slots
&lt;/h2&gt;

&lt;p&gt;Pretty much the same concept as &lt;code&gt;body-cell&lt;/code&gt; slots&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#header-cell=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-th&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: 1.4em;"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-primary"&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;col&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-th&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FndADNte.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%2Fi.imgur.com%2FndADNte.png" alt="Quasar QTable Header Cell Slots"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Specific Header Cell Slot
&lt;/h2&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#header-cell-email=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-th&lt;/span&gt; &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt;
        &lt;span class="na"&gt;size=&lt;/span&gt;&lt;span class="s"&gt;"sm"&lt;/span&gt;
        &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"q-mr-sm"&lt;/span&gt;
        &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"grey-7"&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;col&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-th&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F89ISRBv.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%2Fi.imgur.com%2F89ISRBv.png" alt="Quasar QTable Specific Header Cell Slot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Header Row Slot
&lt;/h2&gt;

&lt;p&gt;In this example, we make the header cells editable! Cool stuff 😎&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#header=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-th&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
          &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"columns[0].label"&lt;/span&gt;
          &lt;span class="na"&gt;dense&lt;/span&gt;
          &lt;span class="na"&gt;borderless&lt;/span&gt;
          &lt;span class="na"&gt;input-class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-th&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;q-th&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
          &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"columns[1].label"&lt;/span&gt;
          &lt;span class="na"&gt;dense&lt;/span&gt;
          &lt;span class="na"&gt;borderless&lt;/span&gt;
          &lt;span class="na"&gt;input-class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-th&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;q-th&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"age"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
          &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"columns[2].label"&lt;/span&gt;
          &lt;span class="na"&gt;dense&lt;/span&gt;
          &lt;span class="na"&gt;borderless&lt;/span&gt;
          &lt;span class="na"&gt;input-class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold text-center"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-th&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FUtux5Zi.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%2Fi.imgur.com%2FUtux5Zi.png" alt="Quasar QTable Header Row Slot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom And Top Row Slot
&lt;/h2&gt;

&lt;p&gt;Great for aggregations and averages! This is where we use those lodash functions...&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#top-row&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Average:
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nf"&gt;meanBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#bottom-row&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-green-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Total:
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nf"&gt;sumBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FGoskK5f.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%2Fi.imgur.com%2FGoskK5f.png" alt="Quasar QTable Bottom And Top Row Slot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Top Slot (&lt;strong&gt;above&lt;/strong&gt; the actual table)
&lt;/h2&gt;

&lt;p&gt;Perfect for things like &lt;strong&gt;filters&lt;/strong&gt; and a &lt;strong&gt;search input&lt;/strong&gt;&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#top&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold"&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: 1.3em;"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Cute Pups
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"q-ml-md"&lt;/span&gt;
      &lt;span class="na"&gt;dense&lt;/span&gt;
      &lt;span class="na"&gt;outlined&lt;/span&gt;
      &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Search"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;template&lt;/span&gt; &lt;span class="na"&gt;#prepend&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-input&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F5UcRa96.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%2Fi.imgur.com%2F5UcRa96.png" alt="Quasar QTable Customizing the Top With A Search Input"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Slot (&lt;strong&gt;below&lt;/strong&gt; the actual table)
&lt;/h2&gt;

&lt;p&gt;Of course, we have total control over the bottom slot!&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#bottom&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;
      dogs from &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://poochypoochypooch.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;poochypoochypooch.com&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FNoWgCLO.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%2Fi.imgur.com%2FNoWgCLO.png" alt="Quasar QTable Customizing The Bottom"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Top Left and Top Right Slot
&lt;/h2&gt;

&lt;p&gt;I like using &lt;code&gt;#top-left&lt;/code&gt; and &lt;code&gt;#top-right&lt;/code&gt; more than &lt;code&gt;#top&lt;/code&gt;. I almost always want something on either side, so it feels nicer than just using &lt;code&gt;#top&lt;/code&gt;...&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#top-left&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-bold"&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: 1.3em;"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Cute Pups
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#top-right&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-input&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"q-ml-md"&lt;/span&gt;
      &lt;span class="na"&gt;dense&lt;/span&gt;
      &lt;span class="na"&gt;outlined&lt;/span&gt;
      &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Search"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;template&lt;/span&gt; &lt;span class="na"&gt;#prepend&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-input&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FGJIH80S.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%2Fi.imgur.com%2FGJIH80S.png" alt="Quasar QTable Top Left and Top Right Slot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  No Data Slot
&lt;/h2&gt;

&lt;p&gt;Of course, we can completely overwrite the message for &lt;strong&gt;no-data&lt;/strong&gt;...&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"[]"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#no-data&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Hmmm, I can't find any dang data!&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FtmA1Ah9.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%2Fi.imgur.com%2FtmA1Ah9.png" alt="Quasar QTable No Data Slot Example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  And That's It!
&lt;/h2&gt;

&lt;p&gt;🎉🍾🎊🤗&lt;/p&gt;

&lt;p&gt;Now, a question...&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I Share My Story With You?
&lt;/h2&gt;

&lt;p&gt;If you enjoyed this post &lt;strong&gt;half as much&lt;/strong&gt; as I enjoyed making it for you, we'll be best friends!&lt;/p&gt;

&lt;p&gt;And if you'd like to hear some of my story, head on over to &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'll &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;share the journey that lead to my love of Quasar&lt;/a&gt;, and tell you about the &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Massive&lt;/strong&gt; component series&lt;/a&gt; I'm currently working on 🙃&lt;/p&gt;

&lt;p&gt;So &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;, and I'll see you on the other side!&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Thanks for reading and remember,&lt;/p&gt;

&lt;p&gt;There is &lt;strong&gt;nothing&lt;/strong&gt; you can't build...&lt;/p&gt;

</description>
      <category>quasar</category>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quasar's QTable: The ULTIMATE Component (3/6) - Loading State, Pagination, and Sorting</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Wed, 18 Aug 2021 12:26:08 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-3-6-loading-state-pagination-and-sorting-2mg0</link>
      <guid>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-3-6-loading-state-pagination-and-sorting-2mg0</guid>
      <description>&lt;p&gt;Here's the video version...&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/jnwdEtrdRuI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;You already know what loading state, pagination and sorting is right?&lt;/p&gt;

&lt;p&gt;Sweet! No preamble required, let's just dive right in...&lt;/p&gt;




&lt;p&gt;Oh, and &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;&lt;strong&gt;WACK this link&lt;/strong&gt;&lt;/a&gt; if you'd like to &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Learn All 72 Of Quasar's Components&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;Now let's begin!&lt;/p&gt;

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

&lt;p&gt;Just want the code? Here's the github repo! &lt;a href="https://github.com/ldiebold/q-table-blog" rel="noopener noreferrer"&gt;ldiebold/q-table-blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll do some fancy pants stuff in this blog, so we'll need a backend... Luckily, I built a &lt;strong&gt;free api just for you&lt;/strong&gt;! checkout this endpoint...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://table.quasarcomponents.com/dogs" rel="noopener noreferrer"&gt;https://table.quasarcomponents.com/dogs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a squiz at the data! if you scroll down to the &lt;code&gt;meta&lt;/code&gt; property, you'll notice that we have pagination...&lt;/p&gt;

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

&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2021-08-17T01:29:29.000000Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2021-08-17T01:29:29.000000Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hollie&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;nshields@yahoo.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2021-08-17T01:29:29.000000Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2021-08-17T01:29:29.000000Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sonya&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;shields.gonzalo@douglas.info&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;first&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://table.quasarcomponents.com/dogs?page=1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://table.quasarcomponents.com/dogs?page=34&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://table.quasarcomponents.com/dogs?page=2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;current_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;last_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;laquo; Previous&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;active&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://table.quasarcomponents.com/dogs?page=1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;active&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://table.quasarcomponents.com/dogs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;per_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that much of the &lt;code&gt;data&lt;/code&gt; and &lt;code&gt;links&lt;/code&gt; have been removed for brevity&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We'll need axios so it's easy to hit that endpoint, so let's go ahead and install it:&lt;/p&gt;

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

yarn add axios


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

&lt;/div&gt;

&lt;p&gt;Now we'll use it in our &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;:&lt;/p&gt;

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

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineComponent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nf"&gt;setup &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dogs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;([])&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;// Fetch dogs&lt;/span&gt;
    &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://table.quasarcomponents.com/dogs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;dogs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;dogs&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;

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

&lt;/div&gt;

&lt;p&gt;If you've read the prior two posts, this might be starting to make sense...&lt;/p&gt;

&lt;p&gt;We setup some &lt;strong&gt;data&lt;/strong&gt;, do some &lt;strong&gt;column&lt;/strong&gt; config, &lt;strong&gt;fetch the dogs&lt;/strong&gt;, update our &lt;code&gt;dogs&lt;/code&gt; array, toggle the &lt;code&gt;loading&lt;/code&gt; state, and expose it to the template!&lt;/p&gt;

&lt;h2&gt;
  
  
  Loading State
&lt;/h2&gt;

&lt;p&gt;Quasar gives us a simple, beautiful loading bar when we set the &lt;code&gt;loading&lt;/code&gt; prop to &lt;code&gt;true&lt;/code&gt;. It also respects the tables &lt;code&gt;color&lt;/code&gt; prop!&lt;/p&gt;

&lt;p&gt;Here, I'll show you...&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"secondary"&lt;/span&gt;
  &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"loading"&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"dogs"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F6b3ocYi.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%2Fi.imgur.com%2F6b3ocYi.png" alt="Quasar QTable Basic Loading State"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it! You might need to refresh the page to see it loading (especially if you're in Paris, cause that's where the server is!)&lt;/p&gt;

&lt;p&gt;You could also just set &lt;code&gt;:loading="true"&lt;/code&gt;. I usually do this when playing with the styling!&lt;/p&gt;

&lt;p&gt;So that's basic loading but of course...&lt;/p&gt;

&lt;p&gt;Quasar gives us &lt;strong&gt;TOTAL control&lt;/strong&gt; with slots 🙃&lt;/p&gt;

&lt;h2&gt;
  
  
  The &lt;code&gt;#loading&lt;/code&gt; Slot
&lt;/h2&gt;

&lt;p&gt;Take a look at the &lt;code&gt;#loading&lt;/code&gt; slot in this example:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"loading"&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"dogs"&lt;/span&gt;
  &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#loading&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-inner-loading&lt;/span&gt;
      &lt;span class="na"&gt;showing&lt;/span&gt;
      &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FqxN8ZjT.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%2Fi.imgur.com%2FqxN8ZjT.png" alt="Quasar QTable Loading State With Slots"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using Quasar's &lt;code&gt;QInnerSpinner&lt;/code&gt; component, we can create a beautiful alternative way of displaying "loading".&lt;/p&gt;

&lt;p&gt;I personally think &lt;strong&gt;this looks sweet!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alright, that's enough loading you crazy dev you 😁. Let's take a look at pagination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pagination
&lt;/h2&gt;

&lt;p&gt;Quasar's &lt;code&gt;QTable&lt;/code&gt; gives you &lt;strong&gt;everything you need for pagination&lt;/strong&gt; by allowing you to model &lt;code&gt;pagination&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;let's add it to our script&lt;/p&gt;

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

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineComponent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nf"&gt;setup &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pagination&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;sortBy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;descending&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;rowsPerPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="nx"&gt;pagination&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Most of those pagination options likely make sense to you. Note that Quasar also gives us &lt;code&gt;sortBy&lt;/code&gt; and &lt;code&gt;descending&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sortBy&lt;/code&gt; and &lt;code&gt;descending&lt;/code&gt; allow us to set a &lt;strong&gt;default sort&lt;/strong&gt; to our table. Where I work, &lt;strong&gt;we use this a lot&lt;/strong&gt; as clients often want to see their data in &lt;strong&gt;alphabetical order&lt;/strong&gt; by default.&lt;/p&gt;

&lt;p&gt;I'll show you later how it's possible to &lt;strong&gt;change the sort algorithm&lt;/strong&gt; (I always feel smart using the word "algorithm")&lt;/p&gt;

&lt;p&gt;Now let's &lt;strong&gt;model this pagination data&lt;/strong&gt; in the table:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;v-model:pagination=&lt;/span&gt;&lt;span class="s"&gt;"pagination"&lt;/span&gt;
  &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"secondary"&lt;/span&gt;
  &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"loading"&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"dogs"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FHlJNFTf.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%2Fi.imgur.com%2FHlJNFTf.png" alt="Quasar QTable Basic Pagination"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pretty cool huh?&lt;/p&gt;

&lt;p&gt;AND, we can even change those &lt;strong&gt;Rows per page options&lt;/strong&gt; with a prop:&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;v-model:pagination=&lt;/span&gt;&lt;span class="s"&gt;"pagination"&lt;/span&gt;
  &lt;span class="na"&gt;:rows-per-page-options=&lt;/span&gt;&lt;span class="s"&gt;"[3, 5, 10, 0]"&lt;/span&gt;
  &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"secondary"&lt;/span&gt;
  &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"loading"&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"dogs"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FBPZHtMd.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%2Fi.imgur.com%2FBPZHtMd.png" alt="Quasar QTable Rows Per Page Pagination"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gosh I love Quasar ❤️&lt;/p&gt;

&lt;p&gt;If you're a &lt;strong&gt;POWER user&lt;/strong&gt;, you might be crossing your arms thinking "yea, but I need &lt;strong&gt;server side&lt;/strong&gt; pagination. Server side pagination is always a pain to implement."&lt;/p&gt;

&lt;p&gt;Well &lt;strong&gt;uncross those arms&lt;/strong&gt; because it's a piece of pecan pie with Quasar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Server Side Pagination (A Piece Of Pecan Pie)
&lt;/h2&gt;

&lt;p&gt;This is why I build the &lt;a href="https://table.quasarcomponents.com/dogs" rel="noopener noreferrer"&gt;https://table.quasarcomponents.com/dogs&lt;/a&gt; api! So we can easily play with server side pagination...&lt;/p&gt;

&lt;p&gt;I'm going to &lt;strong&gt;move my explanation into the code&lt;/strong&gt;, since this example is a little more involved! See you there...&lt;/p&gt;

&lt;p&gt;⬇️&lt;em&gt;Jumps into code block below&lt;/em&gt;⬇️&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!--
    Why hello there!
    Meet me at the "script" section. That's where the magic happens 🪄
  --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;q-page&lt;/span&gt;
    &lt;span class="na"&gt;padding&lt;/span&gt;
    &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex justify-center"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"full-width q-gutter-xl"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!--
        Two things to notice here
        1. "rows-per-page-options" has been emptied.
            We're going to let the server decide how many "rows per page"
        2. @request is fired whenever a pagination is clicked! Handy 🙂
       --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
        &lt;span class="na"&gt;v-model:pagination=&lt;/span&gt;&lt;span class="s"&gt;"pagination"&lt;/span&gt;
        &lt;span class="na"&gt;:rows-per-page-options=&lt;/span&gt;&lt;span class="s"&gt;"[]"&lt;/span&gt;
        &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"secondary"&lt;/span&gt;
        &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"loading"&lt;/span&gt;
        &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"dogs"&lt;/span&gt;
        &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
        &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;request=&lt;/span&gt;&lt;span class="s"&gt;"onRequest"&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/q-page&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineComponent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nf"&gt;setup &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// And here we are!&lt;/span&gt;
    &lt;span class="c1"&gt;// I'll only comment on the parts that are different 😉&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dogs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;([])&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pagination&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="c1"&gt;// No longer using sort. if needed, this can now be done using the backend!&lt;/span&gt;
      &lt;span class="c1"&gt;// sortBy: 'name',&lt;/span&gt;
      &lt;span class="c1"&gt;// descending: false,&lt;/span&gt;
      &lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;rowsPerPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="c1"&gt;// When using server side pagination, QTable needs&lt;/span&gt;
      &lt;span class="c1"&gt;// to know the "rows number" (total number of rows).&lt;/span&gt;
      &lt;span class="c1"&gt;// Why?&lt;/span&gt;
      &lt;span class="c1"&gt;// Because Quasar has no way of knowing what the last page&lt;/span&gt;
      &lt;span class="c1"&gt;// will be without this information!&lt;/span&gt;
      &lt;span class="c1"&gt;// Therefore, we now need to supply it with a "rowsNumber" ourself.&lt;/span&gt;
      &lt;span class="na"&gt;rowsNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;// Fetch dogs&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchDogs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// we can specify the "page" to jump to&lt;/span&gt;
      &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://table.quasarcomponents.com/dogs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// here, we tell the api what "page" to jump to&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;dogs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;
          &lt;span class="c1"&gt;// The api gives us "meta data".&lt;/span&gt;
          &lt;span class="c1"&gt;// this meta data gives us everything we&lt;/span&gt;
          &lt;span class="c1"&gt;// need to get pagination working!&lt;/span&gt;
          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;

          &lt;span class="c1"&gt;// We now update "pagination" with our meta data&lt;/span&gt;
          &lt;span class="c1"&gt;// from the server. This is where the magic happens 🪄&lt;/span&gt;
          &lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current_page&lt;/span&gt;
          &lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rowsPerPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;per_page&lt;/span&gt;
          &lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rowsNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// QTable exposes a @request method (see the &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;// This will be called when one of the pagination buttons are clicked.&lt;/span&gt;
    &lt;span class="c1"&gt;// it gives us everything we need, including the new page number!&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;fetchDogs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// The initial fetch&lt;/span&gt;
    &lt;span class="nf"&gt;fetchDogs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;onRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;dogs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;pagination&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;⬆️&lt;em&gt;Jumps out of code block&lt;/em&gt;⬆️&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HOW COOL WAS THAT!!??&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Being &lt;strong&gt;INSIDE&lt;/strong&gt; a code block is strange... It was kinda cold in there, will have to take a coat next time 🧥&lt;/p&gt;

&lt;p&gt;Anywho,&lt;/p&gt;

&lt;p&gt;Let's take a look at the result:&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%2Fi.imgur.com%2FOiUTatl.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%2Fi.imgur.com%2FOiUTatl.png" alt="Quasar QTable Server Side Pagination"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So there you go. Server side pagination is a blast with Quasar!&lt;/p&gt;

&lt;p&gt;And if you &lt;strong&gt;really&lt;/strong&gt; want total control, you could use Quasar's &lt;code&gt;QPagination&lt;/code&gt; component and completely replace &lt;code&gt;QTable&lt;/code&gt;'s pagination.&lt;/p&gt;

&lt;p&gt;Right, let's move on to the &lt;strong&gt;last topic&lt;/strong&gt; for today/night/evening/morning (us devs are worldy people)...&lt;/p&gt;

&lt;h2&gt;
  
  
  Sorting
&lt;/h2&gt;

&lt;p&gt;Want basic sorting? Quasar's got ya sorted! HA! &lt;strong&gt;I made a joke!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ahem&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sorting is only &lt;strong&gt;one prop away...&lt;/strong&gt;&lt;/p&gt;

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

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Notice we set &lt;code&gt;sortable: true&lt;/code&gt; on all the columns?&lt;/p&gt;

&lt;p&gt;Also, notice that when we hover over one of the "heading" cells, we get a &lt;strong&gt;sort arrow...&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fz965MkA.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%2Fi.imgur.com%2Fz965MkA.png" alt="Quasar QTable Basic Sorting"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sortable: true&lt;/code&gt; will do the job most of the time, otherwise we can use...&lt;/p&gt;

&lt;h2&gt;
  
  
  Custom Sorting
&lt;/h2&gt;

&lt;p&gt;Need to use your own sort function? No problem!&lt;/p&gt;

&lt;p&gt;In this example, we'll sort using &lt;strong&gt;email&lt;/strong&gt; by &lt;strong&gt;domain&lt;/strong&gt; (e.g. gmail.com, hotmail.com, quasarcast.com etc)&lt;/p&gt;

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

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;domainA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;domainB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;domainA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;domainB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bon Appétable!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FzkG3RSw.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%2Fi.imgur.com%2FzkG3RSw.png" alt="Quasar QTable Custom Sort By Email Domain"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're now sorting with our own sorter! Sorta cool right?&lt;/p&gt;

&lt;h2&gt;
  
  
  "What's Next?""
&lt;/h2&gt;

&lt;p&gt;In the next post, I'm going to gift you with QTable's ultimate power!&lt;/p&gt;

&lt;p&gt;We're going to cover &lt;strong&gt;All of Quasar's Slots!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You're not gonna wanna miss it! Slots give &lt;code&gt;QTable&lt;/code&gt; &lt;strong&gt;UNLIMITED&lt;/strong&gt; flexibility 💪&lt;/p&gt;

&lt;h2&gt;
  
  
  For Those That Need A Little More...
&lt;/h2&gt;

&lt;p&gt;Quasar has a &lt;strong&gt;huge&lt;/strong&gt;, impressive component library.&lt;/p&gt;

&lt;p&gt;The APIs will &lt;strong&gt;bring you to your knees&lt;/strong&gt; with joy! The flexibility will have you &lt;strong&gt;nodding your head with approval&lt;/strong&gt;, and the beautiful community will lead you to &lt;strong&gt;fall in love&lt;/strong&gt; with this framework.&lt;/p&gt;

&lt;p&gt;Sound like something worth exploring?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Of course it is!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now head on over to &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt; and let me to &lt;strong&gt;take you on a journey you'll never forget!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll teach you &lt;a href="(https://quasarcomponents.com)"&gt;&lt;strong&gt;all 72&lt;/strong&gt;&lt;/a&gt; of Quasar's components in &lt;strong&gt;action packed&lt;/strong&gt; videos that will leave you &lt;strong&gt;excited to code!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;Click Here and I'll see you on the other side!&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;That's all my dear dev friends. Now can you please do me a &lt;strong&gt;very important favour&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Go to bed tonight remembering, and dreaming about &lt;strong&gt;this one thing&lt;/strong&gt;,&lt;/p&gt;

&lt;p&gt;There is &lt;strong&gt;nothing&lt;/strong&gt; you can't build...&lt;/p&gt;

</description>
      <category>quasar</category>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quasar's QTable: The ULTIMATE Component (2/6) - Expandable Rows and Selectable Rows</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Tue, 17 Aug 2021 11:43:48 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-2-6-expandable-rows-and-selectable-rows-2ng9</link>
      <guid>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-2-6-expandable-rows-and-selectable-rows-2ng9</guid>
      <description>&lt;p&gt;Prefer video? I got ya covered!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/f5Vn0MU5u6w"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I use selectable rows, and expandable rows all the time! I'll give you a real world example.&lt;/p&gt;

&lt;p&gt;We record "spraying events" for paddocks, and sometimes a paddock will be sprayed many times! Our app groups individual sprays by paddock, and also gives a "total amount sprayed" in the parent row!&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%2Fi.imgur.com%2FqtLZRyr.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%2Fi.imgur.com%2FqtLZRyr.png" alt="Paddock Sprays With QTable"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now look at what happens when we click on one of the rows...&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%2Fi.imgur.com%2FQxtoB4B.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%2Fi.imgur.com%2FQxtoB4B.png" alt="Paddock Sprays With QTable Expanded"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The farmers LOVE IT! And guess what...&lt;/p&gt;

&lt;p&gt;It was &lt;strong&gt;surprisingly easy&lt;/strong&gt; to build with Quasar's QTable! I'll show you how 😊&lt;/p&gt;

&lt;p&gt;Also, notice the &lt;strong&gt;Totals&lt;/strong&gt; row at the bottom? Also a piece of cake with Quasar! (more on summary rows in a future blog post)&lt;/p&gt;

&lt;p&gt;Now before we dive in, take a look at &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt; for some &lt;strong&gt;action packed&lt;/strong&gt;, heart &lt;strong&gt;POUNDING&lt;/strong&gt;, nail &lt;strong&gt;biting&lt;/strong&gt;, high &lt;strong&gt;intensity&lt;/strong&gt; videos on &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;all 72 of Quasar's components!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;click here&lt;/a&gt; and I'll see you on the other side 😁&lt;/p&gt;

&lt;h2&gt;
  
  
  A Little Setup
&lt;/h2&gt;

&lt;p&gt;Let's do some basic setup so things run smoothly!&lt;/p&gt;

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

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setup &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Panda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;panda@chihuahua.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lily&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lily@chihuahua.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expand&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expand&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expand&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;selected&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;

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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/ldiebold/q-table-blog" rel="noopener noreferrer"&gt;and here's the github repo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Expandable Rows
&lt;/h2&gt;

&lt;p&gt;Expandable rows are made possible with the &lt;code&gt;#body&lt;/code&gt; slot. I'll here's how it's done 😎&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#body=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&lt;/span&gt; &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- Expand cell/button --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"expand"&lt;/span&gt;
        &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"expand"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
        &lt;span class="na"&gt;auto-width&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!--
          The important part here is
          @click="props.expand = !props.expand"
        --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-btn&lt;/span&gt;
          &lt;span class="na"&gt;flat&lt;/span&gt;
          &lt;span class="na"&gt;round&lt;/span&gt;
          &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"props.expand ? 'remove' : 'add'"&lt;/span&gt;
          &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"props.expand = !props.expand"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!--
        Notice that we the "key" matches the columns "name" property
        Notice that we "proxy" the props from #body="props" to our q-td
      --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"age"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- We show the row if "props.expand" is toggled to true! --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&lt;/span&gt;
      &lt;span class="na"&gt;v-show=&lt;/span&gt;&lt;span class="s"&gt;"props.expand"&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"100%"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-left"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          Expanded
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;all closed&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FfQ06tvw.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%2Fi.imgur.com%2FfQ06tvw.png" alt="Basic QTable Expandable Row Example Closed"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;one row expanded&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FjWkLe6s.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%2Fi.imgur.com%2FjWkLe6s.png" alt="Basic QTable Expandable Row Example Opened"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few things to note here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;: The &lt;code&gt;#body&lt;/code&gt; slot allows us to tap into individual rows&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second&lt;/strong&gt;: we use Quasar's &lt;code&gt;q-tr&lt;/code&gt; and &lt;code&gt;q-td&lt;/code&gt; components to build the row. This gives us INSANE control!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third&lt;/strong&gt;: We use the scope (&lt;code&gt;#body="props"&lt;/code&gt;) and pass it to every &lt;code&gt;q-td&lt;/code&gt; and &lt;code&gt;q-tr&lt;/code&gt;. This is important! It means our &lt;code&gt;q-tr&lt;/code&gt;'s and &lt;code&gt;q-td&lt;/code&gt;'s get all the styling they need for things like &lt;code&gt;dense&lt;/code&gt; and &lt;code&gt;visible-columns&lt;/code&gt; (more on those later)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fouth&lt;/strong&gt;: We can toggle/track if a row is expanded with &lt;code&gt;props.expanded&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Read those four points back and forth until they make sense! Understand them, and you'll have &lt;strong&gt;IMMENSE power&lt;/strong&gt; over Quasar's QTable!&lt;/p&gt;

&lt;p&gt;Also notice that in the expanded row, we use &lt;code&gt;colspan="100%"&lt;/code&gt; to basically say "take up all the space in this row". Helpful for things like "create" buttons that insert new rows.&lt;/p&gt;

&lt;p&gt;AND, &lt;code&gt;auto-width&lt;/code&gt; which "Tries to shrink column width size; Useful for columns with a checkbox/radio/toggle"&lt;/p&gt;

&lt;h2&gt;
  
  
  Individual Cells For Each Row
&lt;/h2&gt;

&lt;p&gt;To be thorough, here's an example where the expanded row has cells, lining up with cells on the parent row...&lt;/p&gt;

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

&lt;span class="c"&gt;&amp;lt;!-- Expandable Row (cells) --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#body=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- PARENT ROW --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&lt;/span&gt; &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- Expand cell/button --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"expand"&lt;/span&gt;
        &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"expand"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
        &lt;span class="na"&gt;auto-width&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-btn&lt;/span&gt;
          &lt;span class="na"&gt;flat&lt;/span&gt;
          &lt;span class="na"&gt;round&lt;/span&gt;
          &lt;span class="na"&gt;:icon=&lt;/span&gt;&lt;span class="s"&gt;"props.expand ? 'remove' : 'add'"&lt;/span&gt;
          &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"props.expand = !props.expand"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"age"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- CHILD ROW --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-tr&lt;/span&gt;
      &lt;span class="na"&gt;v-show=&lt;/span&gt;&lt;span class="s"&gt;"props.expand"&lt;/span&gt;
      &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!--
        Might want to leave the first cell blank, as it is
        simply space for the "expand" column
      --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"expand"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt; &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        summary
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        summary
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        summary
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        summary
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-td&lt;/span&gt;
        &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"age"&lt;/span&gt;
        &lt;span class="na"&gt;:props=&lt;/span&gt;&lt;span class="s"&gt;"props"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        summary
      &lt;span class="nt"&gt;&amp;lt;/q-td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FRYqt0vU.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%2Fi.imgur.com%2FRYqt0vU.png" alt="Expandable Rows With Cells In The Child Row"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;those places that say "summary"... You can put whatever you like in those cells!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BIG TIP&lt;/strong&gt;: use &lt;code&gt;props.row&lt;/code&gt; to access the current row 🚣&lt;/p&gt;

&lt;p&gt;HA! Emoji joke 😆&lt;/p&gt;

&lt;p&gt;It's also worth noting that &lt;strong&gt;you can have as many "child" rows as you like!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And THAT my friend, is expandable rows. now let's move on to making rows &lt;strong&gt;selectable&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selectable Rows. A Gift From Quasar 🎁
&lt;/h2&gt;

&lt;p&gt;This truly is a gift! I've implemented a "selectable rows" feature myself in the past and you know what?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It SUCKS!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quasar makes it easier than blowing out a two year old's birthday candles 🎂 (which you shouldn't do, that's not cool)...&lt;/p&gt;

&lt;p&gt;Check it!&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;v-model:selected=&lt;/span&gt;&lt;span class="s"&gt;"selected"&lt;/span&gt;
  &lt;span class="na"&gt;selection=&lt;/span&gt;&lt;span class="s"&gt;"single"&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FLNh0Mpz.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%2Fi.imgur.com%2FLNh0Mpz.png" alt="QTable Basic Selection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes! It really is &lt;strong&gt;that flippen easy&lt;/strong&gt; 😱😱😱&lt;/p&gt;

&lt;p&gt;Do I even need to explain this code!?&lt;/p&gt;

&lt;p&gt;The one thing to note, is &lt;code&gt;row-key&lt;/code&gt; is used to uniquely identify the selected data, so you'll need it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HOT TIP&lt;/strong&gt;: use the &lt;code&gt;pre&lt;/code&gt; tag to display this data nicely when testing...&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;pre&amp;gt;&lt;/span&gt;{{ selected }}&lt;span class="nt"&gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;That's what all the cool kids are doing (or so I'm told)&lt;/p&gt;

&lt;h2&gt;
  
  
  "But Luke! I want to use a TOGGLE, not a checkbox
&lt;/h2&gt;

&lt;p&gt;Oh!? Do ya now!?&lt;/p&gt;

&lt;p&gt;No worries my inquisitive friend! Rollup your sleeves and try this!&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;v-model:selected=&lt;/span&gt;&lt;span class="s"&gt;"selected"&lt;/span&gt;
  &lt;span class="na"&gt;selection=&lt;/span&gt;&lt;span class="s"&gt;"multiple"&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"rows"&lt;/span&gt;
  &lt;span class="na"&gt;row-key=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#header-selection=&lt;/span&gt;&lt;span class="s"&gt;"scope"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-toggle&lt;/span&gt; &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"scope.selected"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#body-selection=&lt;/span&gt;&lt;span class="s"&gt;"scope"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-toggle&lt;/span&gt; &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"scope.selected"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-table&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FDvUyFCu.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%2Fi.imgur.com%2FDvUyFCu.png" alt="Customizing Quasar QTable Selected With Slots"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(did you catch my cheeky rollup joke?)&lt;/p&gt;

&lt;p&gt;Note that &lt;code&gt;scope.selected&lt;/code&gt; is a simple function that toggles the selection for you. Easy right?&lt;/p&gt;

&lt;p&gt;Are you starting to see how Quasar's API makes building components bliss? I LOVE it ❤️&lt;/p&gt;

&lt;h2&gt;
  
  
  multiple select
&lt;/h2&gt;

&lt;p&gt;You can enable multiple select by changing &lt;code&gt;selection="single"&lt;/code&gt; to &lt;code&gt;selection="multiple"&lt;/code&gt; 🍪&lt;/p&gt;

&lt;h2&gt;
  
  
  "Luke! This Is SO COOL! I Want &lt;strong&gt;MORE&lt;/strong&gt;"
&lt;/h2&gt;

&lt;p&gt;Oh nice, I love your enthusiasm!&lt;/p&gt;

&lt;p&gt;If you want to learn more about this stuff, head on over to &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In that series, we will...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cover &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;&lt;strong&gt;all 72&lt;/strong&gt;&lt;/a&gt; of Quasar's Components&lt;/li&gt;
&lt;li&gt;Build &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;&lt;strong&gt;YouTube's UI&lt;/strong&gt;&lt;/a&gt; with Quasar&lt;/li&gt;
&lt;li&gt;Build &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;a &lt;strong&gt;Live Chat App&lt;/strong&gt;&lt;/a&gt; with Laravel and Quasar&lt;/li&gt;
&lt;li&gt;Build a Quasar &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;&lt;strong&gt;App Extension&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All proceeds are donated directly to the Quasar Dev team!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;Check it out here&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Thanks for reading 🤓. Tomorrow we'll cover &lt;strong&gt;Loading State, Pagination, and Sorting&lt;/strong&gt; (You're gonna LOVE &lt;strong&gt;Pagination&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Bye for now! And please for the love of code remember,&lt;/p&gt;

&lt;p&gt;There is &lt;strong&gt;nothing&lt;/strong&gt; you can't build...&lt;/p&gt;

</description>
      <category>quasar</category>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quasar's QTable: The ULTIMATE Component (1/6) - Setup, Data and Columns!</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Mon, 16 Aug 2021 13:22:34 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-1-6-setup-data-and-columns-126o</link>
      <guid>https://dev.to/quasar/quasar-s-qtable-the-ultimate-component-1-6-setup-data-and-columns-126o</guid>
      <description>&lt;p&gt;Quasar has &lt;strong&gt;72 Components!&lt;/strong&gt; If you want to watch a video on every single one of them, take a look at &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There's also a bunch of bonuses like &lt;strong&gt;Building YouTube's UI&lt;/strong&gt;, Creating a &lt;strong&gt;Live Quasar Chat App&lt;/strong&gt;, Crafting Quasar UI Library with your very own &lt;strong&gt;App Extension&lt;/strong&gt; AND...&lt;/p&gt;

&lt;p&gt;All proceeds go directly to helping the development of Quasar!&lt;/p&gt;

&lt;p&gt;Pretty cool huh?&lt;/p&gt;

&lt;p&gt;So &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;check it out&lt;/a&gt;, and join all the other cool cats at &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's have some fun with &lt;code&gt;QTable&lt;/code&gt;!!!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rv35cyGVRVY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Never used Quasar before? Here's the &lt;strong&gt;tldr&lt;/strong&gt; of setting up Quasar so you can follow along 🙂&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @quasar/cli

quasar create q-table-play

&lt;span class="nb"&gt;cd &lt;/span&gt;q-table-play

quasar dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, clone &lt;a href="https://github.com/ldiebold/q-table-blog" rel="noopener noreferrer"&gt;The Github Repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You now have an app that can export to mobile, desktop, spa, pwa, ssr and even a browser extension. &lt;strong&gt;I'm not joking!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now let's get to &lt;code&gt;QTable&lt;/code&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;QTable&lt;/strong&gt; is likely the most gorgeously designed, magnificently crafted, well thought out components on the web. Why?&lt;/p&gt;

&lt;p&gt;It follows a &lt;strong&gt;wonderful&lt;/strong&gt; pattern (like all other Quasar components)...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Easy to get started, yet configurable to the nth degree!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now check this out...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"[
    {
      name: 'Panda',
      email: 'panda@chihuahua.com',
    },
    {
      name: 'Lily',
      email: 'lily@chihuahua.com',
    }
  ]"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1629118665%2FBasic%2520Example.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1629118665%2FBasic%2520Example.png" alt="Basic Example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's right! We just give it an array of objects (aka collection) and it runs smoother than a tesla...&lt;/p&gt;

&lt;p&gt;But it gets better...&lt;/p&gt;

&lt;h2&gt;
  
  
  Specifying Columns
&lt;/h2&gt;

&lt;p&gt;So can you customize the columns?...&lt;/p&gt;

&lt;p&gt;OF COURSE YOU CAN!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"My Chihuahuas"&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"[
    {
      name: 'Panda',
      email: 'panda@chihuahua.com',
      age: 6
    },
    {
      name: 'Lily',
      email: 'lily@chihuahua.com',
      age: 5
    }
  ]"&lt;/span&gt;
  &lt;span class="na"&gt;:columns=&lt;/span&gt;&lt;span class="s"&gt;"[
    {
      label: 'Dog Name',
      field: 'name',
      name: 'name',
      align: 'left'
    },
    {
      label: 'Email',
      field: 'email',
      name: 'email',
      align: 'left'
    },
    {
      label: 'Age',
      field: 'age',
      name: 'age',
      align: 'center',
      format: age =&amp;gt; `${age} years`
    }
  ]"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1629118665%2FCustom%2520Columns.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1629118665%2FCustom%2520Columns.png" alt="Custom Columns"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You would probably want to move the columns and data out of the template, I just want to keep these examples simple 🙂&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simple right?&lt;/p&gt;

&lt;p&gt;We just give that bad boi an object for every column. Try changing the order of the columns and see what happens...&lt;/p&gt;

&lt;p&gt;Also, notice we can add a formatter with &lt;code&gt;format&lt;/code&gt; (see the "age" column). And there's something else cool here.&lt;/p&gt;

&lt;p&gt;We can easily &lt;code&gt;align&lt;/code&gt; content, and set the &lt;code&gt;label&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;We also have &lt;code&gt;sortable&lt;/code&gt;, &lt;code&gt;style&lt;/code&gt;, &lt;code&gt;classes&lt;/code&gt; and more! Checkout the QColumn Smörgåsbord &lt;a href="https://quasar.dev/vue-components/table#qtable-api" rel="noopener noreferrer"&gt;here&lt;/a&gt; (click on &lt;code&gt;Column&lt;/code&gt; to see all the options)&lt;/p&gt;

&lt;p&gt;But we need basics like a "title" and of course... &lt;strong&gt;Dark Mode&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Title and Dark Mode
&lt;/h2&gt;

&lt;p&gt;Wait what? Your table doesn't support dark mode? How do you sleep at night!?&lt;/p&gt;

&lt;p&gt;Just fine. Get over it.&lt;/p&gt;

&lt;p&gt;Seriously though, dark mode is pretty sweet, and Quasar's &lt;code&gt;QTable&lt;/code&gt; supports it with the unambiguous &lt;code&gt;dark&lt;/code&gt; property!&lt;/p&gt;

&lt;p&gt;While we're at it, let's use &lt;code&gt;separator&lt;/code&gt; to add &lt;em&gt;horizontal&lt;/em&gt; and &lt;em&gt;vertical&lt;/em&gt; lines!&lt;/p&gt;

&lt;p&gt;We'll also remove &lt;strong&gt;pagination&lt;/strong&gt; with &lt;code&gt;:rows-per-page-options="[0]"&lt;/code&gt; (much more on pagination later), and we'll hide the bottom row to save space!&lt;/p&gt;

&lt;p&gt;And you know what? Those cells are lookin waaay too chunky. Let's dense 'em up with the &lt;code&gt;dense&lt;/code&gt; property!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;q-table&lt;/span&gt;
  &lt;span class="na"&gt;dark&lt;/span&gt;
  &lt;span class="na"&gt;:rows-per-page-options=&lt;/span&gt;&lt;span class="s"&gt;"[0]"&lt;/span&gt;
  &lt;span class="na"&gt;hide-bottom&lt;/span&gt;
  &lt;span class="na"&gt;separator=&lt;/span&gt;&lt;span class="s"&gt;"cell"&lt;/span&gt;
  &lt;span class="na"&gt;dense&lt;/span&gt;
  &lt;span class="na"&gt;:rows=&lt;/span&gt;&lt;span class="s"&gt;"[
    {
      name: 'Panda',
      email: 'panda@chihuahua.com',
    },
    {
      name: 'Lily',
      email: 'lily@chihuahua.com',
    },
  ]"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1629118665%2FDark%2520And%2520Dense.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1629118665%2FDark%2520And%2520Dense.png" alt="Dark And Dense"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There we go. Thanks to that &lt;code&gt;dark&lt;/code&gt; property, we're hip... and accepted in the coding community 🙄 😆&lt;/p&gt;

&lt;h2&gt;
  
  
  Oh so much more to come!...
&lt;/h2&gt;

&lt;p&gt;So there you have it! &lt;strong&gt;This is just the beginning&lt;/strong&gt; of a 6 part series. I have so much cool $^*&amp;amp;#% to share with you AND...&lt;/p&gt;




&lt;p&gt;If you &lt;strong&gt;love Quasar's components&lt;/strong&gt; as much as me, or want to see an &lt;strong&gt;in depth video on&lt;/strong&gt; &lt;code&gt;QTable&lt;/code&gt;, meet me over at &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll cover &lt;strong&gt;All 72 Quasar Components&lt;/strong&gt; and...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building YouTube's UI&lt;/li&gt;
&lt;li&gt;Create a Live Quasar Chat App&lt;/li&gt;
&lt;li&gt;Craft a Quasar UI Library with our very own &lt;strong&gt;App Extension&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;All proceeds are sent directly to the Quasar team&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;So thanks for reading. Tomorrow we'll cover &lt;strong&gt;expandable rows&lt;/strong&gt; and &lt;strong&gt;selectable rows&lt;/strong&gt;. Really cool stuff, and Quasar makes it simple 😉&lt;/p&gt;

&lt;p&gt;And remember!&lt;/p&gt;

&lt;p&gt;There is &lt;strong&gt;nothing&lt;/strong&gt; you can't build...&lt;/p&gt;

</description>
      <category>quasar</category>
      <category>vue</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quasar's "Select" Component... 7 Reasons It's The Gift That Just Keeps Giving!</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Sun, 08 Aug 2021 08:08:37 +0000</pubDate>
      <link>https://dev.to/quasar/quasar-s-select-component-7-reasons-it-s-the-gift-that-just-keeps-giving-4j48</link>
      <guid>https://dev.to/quasar/quasar-s-select-component-7-reasons-it-s-the-gift-that-just-keeps-giving-4j48</guid>
      <description>&lt;p&gt;Errrg, building a select component from scratch is like building a house out of sand. Just when you think you're making headway, everything comes crashing down. I hate it...&lt;/p&gt;

&lt;p&gt;Luckily, Quasar's &lt;code&gt;QSelect&lt;/code&gt; component is a gorgeously crafted work of art! And that's awesome, because if there's one wheel I never want to reinvent, it's QSelect (though in reality, it's more like reinventing calculus).&lt;/p&gt;

&lt;p&gt;So without any furthur adon't... let's take a look at what makes QSelect the &lt;strong&gt;One QSelect To Rule Them ALLL!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Oh... And head over to &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt; to learn more about this stuff!&lt;/p&gt;

&lt;h2&gt;
  
  
  #0: The Script Tag!
&lt;/h2&gt;

&lt;p&gt;Following along? Sweet!&lt;br&gt;
Here's the js you'll need to get started. Whack it in, and everything else will be easier to follow :)&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineComponent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineComponent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PageIndex&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="nf"&gt;data &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;slotDog&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;dog&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;dogsPretty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;dogsObjectOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;dogsMultiple&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
      &lt;span class="na"&gt;dogsOtt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
      &lt;span class="na"&gt;longList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;And here is a &lt;a href="https://github.com/ldiebold/quasar-q-select-blog-post" rel="noopener noreferrer"&gt;GitHub repo with all the examples&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  #1: Model That Data!
&lt;/h2&gt;

&lt;p&gt;To get started with &lt;code&gt;QSelect&lt;/code&gt;, we model some data, and add an array of &lt;code&gt;options&lt;/code&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Basic%2520Example.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Basic%2520Example.png" alt="Quasar QSelect Basic Example"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;q-select&lt;/span&gt;
  &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"dog"&lt;/span&gt;
  &lt;span class="na"&gt;:options=&lt;/span&gt;&lt;span class="s"&gt;"['Panda', 'Lily', 'Moe']"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  #2: Or Use an Object For Your Options...
&lt;/h2&gt;

&lt;p&gt;Of course, you can also use a collection of objects. Here's a taste of what that might look like! Note that by default, &lt;code&gt;label&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; are used by &lt;code&gt;QSelect&lt;/code&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Basic%2520Example.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Basic%2520Example.png" alt="Quasar QSelect Basic Example With An Object For Options"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;q-select&lt;/span&gt;
  &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"dogsObjectOptions"&lt;/span&gt;
  &lt;span class="na"&gt;:options=&lt;/span&gt;&lt;span class="s"&gt;"[
    {
      label: 'Panda',
      value: 1
    },
    {
      label: 'Lily',
      value: 2
    },
    {
      label: 'Moe',
      value: 3
    }
  ]"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  #3: Multiple Select!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Of course&lt;/strong&gt; multiple select is possible. Just add the &lt;code&gt;multiple&lt;/code&gt; flag and you'll be modeling an array:&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Multiple.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Multiple.png" alt="Quasar QSelect Multiple"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;q-select&lt;/span&gt;
  &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"dogsMultiple"&lt;/span&gt;
  &lt;span class="na"&gt;:options=&lt;/span&gt;&lt;span class="s"&gt;"['Panda', 'Lily', 'Moe']"&lt;/span&gt;
  &lt;span class="na"&gt;multiple&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  #4: Making it Sexy!!!
&lt;/h2&gt;

&lt;p&gt;Check out this gorgeous select. Bruised my chin after building this one (10 points to Gryffindor if you can decipher that joke).&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Sexified.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Sexified.png" alt="Quasar QSelect Sexified"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;q-select&lt;/span&gt;
  &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"dogsPretty"&lt;/span&gt;
  &lt;span class="na"&gt;label=&lt;/span&gt;&lt;span class="s"&gt;"Selected Dog"&lt;/span&gt;
  &lt;span class="na"&gt;label-color=&lt;/span&gt;&lt;span class="s"&gt;"purple-8"&lt;/span&gt;
  &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"purple"&lt;/span&gt;
  &lt;span class="na"&gt;bg-color=&lt;/span&gt;&lt;span class="s"&gt;"purple-1"&lt;/span&gt;
  &lt;span class="na"&gt;popup-content-class=&lt;/span&gt;&lt;span class="s"&gt;"text-grey-8"&lt;/span&gt;
  &lt;span class="na"&gt;options-selected-class=&lt;/span&gt;&lt;span class="s"&gt;"bg-purple-4 text-white"&lt;/span&gt;
  &lt;span class="na"&gt;:options=&lt;/span&gt;&lt;span class="s"&gt;"['Panda', 'Lily', 'Moe']"&lt;/span&gt;
  &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"max-width: 200px;"&lt;/span&gt;
  &lt;span class="na"&gt;outlined&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  #5: Bunch of Other Cool Stuff In One OTT Example
&lt;/h2&gt;

&lt;p&gt;The API is so dang intuitive, you can probably figure out what most of this does...&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Over%2520The%2520Top%2520Example%2520A.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Over%2520The%2520Top%2520Example%2520A.png" alt="Quasar QSelect Over The Top Example A"&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Over%2520The%2520Top%2520Example%2520B.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Over%2520The%2520Top%2520Example%2520B.png" alt="Quasar QSelect Over The Top Example B"&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Error%2520Handling.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Error%2520Handling.png" alt="Quasar QSelect Error Handling"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;q-select&lt;/span&gt;
  &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"dogsOtt"&lt;/span&gt;
  &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"dog"&lt;/span&gt;
  &lt;span class="na"&gt;option-label=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
  &lt;span class="na"&gt;option-value=&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;
  &lt;span class="na"&gt;multiple&lt;/span&gt;
  &lt;span class="na"&gt;options-dense&lt;/span&gt;
  &lt;span class="na"&gt;use-chips&lt;/span&gt;
  &lt;span class="na"&gt;filled&lt;/span&gt;
  &lt;span class="na"&gt;rounded&lt;/span&gt;
  &lt;span class="na"&gt;hint=&lt;/span&gt;&lt;span class="s"&gt;"Select a dog"&lt;/span&gt;
  &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"brown"&lt;/span&gt;
  &lt;span class="na"&gt;:suffix=&lt;/span&gt;&lt;span class="s"&gt;"dogsOtt.map(dog =&amp;gt; dog.sound).join(', ')"&lt;/span&gt;
  &lt;span class="na"&gt;:loading=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;
  &lt;span class="na"&gt;clear-icon&lt;/span&gt;
  &lt;span class="na"&gt;counter&lt;/span&gt;
  &lt;span class="na"&gt;:rules=&lt;/span&gt;&lt;span class="s"&gt;"[val =&amp;gt; val.length &amp;gt; 1 || 'Please select at least 2 dogs']"&lt;/span&gt;
  &lt;span class="na"&gt;:options=&lt;/span&gt;&lt;span class="s"&gt;"[
    {
      name: 'Panda',
      id: 1,
      sound: 'rrrruf! Ruf RUF!'
    },
    {
      name: 'Lily',
      id: 2,
      sound: 'Beep!'
    },
    {
      name: 'Moe',
      id: 3,
      sound: 'Aroooooooo'
    }
  ]"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;pre&amp;gt;&lt;/span&gt;{{ dogsOtt }}&lt;span class="nt"&gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  #6: What About Performance for Looooong Lists?
&lt;/h2&gt;

&lt;p&gt;Now THIS is cool!&lt;br&gt;
If your list is massive &lt;strong&gt;it will still perform fast!&lt;/strong&gt;&lt;br&gt;
Why? Because Quasar does some fancy pants &lt;em&gt;virtual scroll&lt;/em&gt; voodoo behind the scenes:&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392864%2FQuasar%2520QSelect%2520Massive%2520List%2520Example%2520A.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392864%2FQuasar%2520QSelect%2520Massive%2520List%2520Example%2520A.png" alt="Quasar QSelect Massive List Example A"&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Massive%2520List%2520Example%2520B.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392863%2FQuasar%2520QSelect%2520Massive%2520List%2520Example%2520B.png" alt="Quasar QSelect Massive List Example B"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;q-select&lt;/span&gt;
  &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"longList"&lt;/span&gt;
  &lt;span class="na"&gt;:options=&lt;/span&gt;&lt;span class="s"&gt;"Array.from(Array(1000000).keys())"&lt;/span&gt;
  &lt;span class="na"&gt;multiple&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  #7: Extend it to the Nth Degree with Slots
&lt;/h2&gt;

&lt;p&gt;Want to go on a rampage with me? Okay, grab a coffee, hold onto your seat and we'll modify this bad boi like a 7 of 9!&lt;/p&gt;

&lt;p&gt;Good luck coming up with a "but I can't xyz" excuse after this! WOOHOOOO!!!&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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392865%2FQuasar%2520QSelect%2520Scoped%2520Slots%2520Example.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%2Fres.cloudinary.com%2Fquasarcast-com%2Fimage%2Fupload%2Fv1628392865%2FQuasar%2520QSelect%2520Scoped%2520Slots%2520Example.png" alt="Quasar QSelect Scoped Slots Example"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;q-select&lt;/span&gt;
  &lt;span class="na"&gt;v-model=&lt;/span&gt;&lt;span class="s"&gt;"slotDog"&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;
  &lt;span class="na"&gt;filled&lt;/span&gt;
  &lt;span class="na"&gt;:options=&lt;/span&gt;&lt;span class="s"&gt;"[
    {
      name: 'Panda',
      color: 'grey-4',
    },
    {
      name: 'Lily',
      color: 'yellow-8',
    },
    {
      name: 'Moe',
      color: 'brown',
    }
  ]"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- Add an icon WITHIN the input --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#prepend&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"pets"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Add an icon AFTER the input  --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#after&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt;
      &lt;span class="na"&gt;v-if=&lt;/span&gt;&lt;span class="s"&gt;"slotDog"&lt;/span&gt;
      &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"green"&lt;/span&gt;
      &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"check_circle"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- We can take total control of the label... --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#label&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Favourite Dog
    &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt;
      &lt;span class="na"&gt;size=&lt;/span&gt;&lt;span class="s"&gt;"xs"&lt;/span&gt;
      &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"favorite"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- We can take total control of how options are rendered... --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#option=&lt;/span&gt;&lt;span class="s"&gt;"scope"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-item&lt;/span&gt;
      &lt;span class="na"&gt;clickable&lt;/span&gt;
      &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"scope.toggleOption(scope.opt)"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-item-section&lt;/span&gt; &lt;span class="na"&gt;side&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;q-checkbox&lt;/span&gt;
          &lt;span class="na"&gt;:model-value=&lt;/span&gt;&lt;span class="s"&gt;"scope.selected"&lt;/span&gt;
          &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"scope.toggleOption(scope.opt)"&lt;/span&gt;
        &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-item-section&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;q-item-section&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/q-item-section&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-item&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- We can change how the selection is displayed! --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#selected&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;v-if=&lt;/span&gt;&lt;span class="s"&gt;"slotDog"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex items-center"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"q-mr-xs"&lt;/span&gt;
        &lt;span class="na"&gt;size=&lt;/span&gt;&lt;span class="s"&gt;"xs"&lt;/span&gt;
        &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"circle"&lt;/span&gt;
        &lt;span class="na"&gt;:color=&lt;/span&gt;&lt;span class="s"&gt;"slotDog.color"&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;slotDog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Hooking into the top of our options list is easy! --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#before-options&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-item-label&lt;/span&gt; &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Favourite Dog &lt;span class="nt"&gt;&amp;lt;q-icon&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"favorite"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/q-item-label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- And hooking into AFTER our options is peasy! --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt; &lt;span class="na"&gt;#after-options&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;q-btn&lt;/span&gt;
      &lt;span class="na"&gt;v-close-popup&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"full-width"&lt;/span&gt;
      &lt;span class="na"&gt;label=&lt;/span&gt;&lt;span class="s"&gt;"cancel"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/q-select&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;




&lt;p&gt;&lt;em&gt;Phone Calls&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Luke: Hello?&lt;/p&gt;

&lt;p&gt;Other end: Hi, is this Luke? The creator of select-a-pet-like-a-boss.com?&lt;/p&gt;

&lt;p&gt;Luke: Ummm yes, this is he. How can I help?&lt;/p&gt;

&lt;p&gt;Other end: I just want to let you know, that was the most amazing dog selecting experience I've ever had on the internet. Thankyou!!!&lt;/p&gt;

&lt;p&gt;Luke: Oh wow, you're most welcome kind stranger!&lt;/p&gt;




&lt;p&gt;And that's how you make friends with a Select Component!&lt;/p&gt;

&lt;h2&gt;
  
  
  What Else Is Covered On &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com?...&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;A whooole lot more!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filtering&lt;/li&gt;
&lt;li&gt;lazy loading list items (like from an API)&lt;/li&gt;
&lt;li&gt;validation&lt;/li&gt;
&lt;li&gt;positioning the menu&lt;/li&gt;
&lt;li&gt;displaying sanitized html&lt;/li&gt;
&lt;li&gt;keyboard navigation&lt;/li&gt;
&lt;li&gt;use in a &lt;code&gt;QForm&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Advanced Virtual Scroll techniques (to improve performance for long lists that have custom styling)&lt;/li&gt;
&lt;li&gt;mapping object fields rather than the entire object...
And probably a bazillion other things I can't think of right now. We go deep!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;click here&lt;/a&gt;, and meet me on the other side of &lt;a href="https://quasarcomponents.com" rel="noopener noreferrer"&gt;QuasarComponents.Com&lt;/a&gt; to discover more!&lt;/p&gt;




&lt;p&gt;There you have it! "7 Reasons Quasar's Select Component Is The Gift That Just Keeps Giving!"&lt;/p&gt;

&lt;p&gt;Until next time, and remember:&lt;/p&gt;

&lt;p&gt;There is &lt;strong&gt;nothing&lt;/strong&gt; you can't build...&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
