Skip to content

The Vue.js Cheat Sheet

Common commands and instructions you'll use in your day-to-day Vue.js coding sessions

<!-- TOC -->

<!-- /TOC -->


Directives are attributes identified by the v- prefix.

v-textuses the property as the text value of the element
v-htmluses the property as the text value of the element, interpreting HTML
v-ifshow an element only if the conditional is true
v-elseshows an alternative element if the preceding v-if is false
v-else-ifadds an else if block for a v-if construct
v-showsimilar to v-if, but adds the element to the DOM even if falsy. Just sets it to display: none.
v-foriterates over an array or iterable object
v-onlisten to DOM events
v-bindreactively update an HTML attribute
v-modelsets up a two-way binding for form inputs. used in form elements, updates the model when the user changes the form field value
v-onceapplies the property just once, and never refreshes it even if the data passed changes

v-bind and v-on have a shorthand format:

<a v-bind:href="url">...</a>
<a :href="url">...</a>
<a v-on:click="doSomething">...</a>
<a @click="doSomething">...</a>

Example of v-if / v-else / v-else-if:

<div v-if="type === 'A'">
  it's A
<div v-else-if="type === 'B'">
  it's B
<div v-else-if="type === 'C'">
  it's C
<div v-else>
  it's neither one


You can embed a conditional in an expression using the ternary operator:

{{ isTrue ? 'yes' : 'no' }}

Working with form elements

To make the model update when the change event occurs, and not any time the user presses a key, you can use v-model.lazy instead of just v.model.

Working with input fields, v-model.trim is useful because it automatically removes whitespace.

And if you accept a number instead than a string, make sure you use v-model.number.

Modifying events

I use click as an example, but applies to all possible events

  • v-on:click.native trigger a native DOM event instead of a Vue event
  • v-on:click.stop stop the click event propagation
  • v-on:click.passive makes use of the passive option of addEventListener
  • v-on:click.capture use event capturing instead of event bubbling
  • v-on:click.self make sure the click event was not bubbled from a child event, but directly happened on that element
  • v-on:click.once the event will only be triggered exactly once
  • v-on:submit.prevent: call event.preventDefault() on the triggered submit event, used to avoid a form submit to reload the page

For more on propagation, bubbling/capturing see my JavaScript events guide.

Mouse event modifiers

  • v-on:click .left triggers only on left mouse button click
  • v-on:click .right triggers only on right mouse button click
  • v-on:click .middle triggers only on middle mouse button click

Submit an event only if a particular key is pressed

  • v-on:keyup.enter
  • v-on:keyup.delete
  • v-on:keyup.esc
  • v-on:keyup.up
  • v-on:keyup.down
  • v-on:keyup.left
  • v-on:keyup.right

Keyboard event modifiers

Only trigger the event if a particular keyboard key is also pressed:

  • .ctrl
  • .alt
  • .shift
  • .meta (cmd on Mac, windows key on Win)


  • v-bind .prop bind a prop instead of an attribute
  • v-bind .camel use camelCase for the attribute name
  • v-bind .sync a syntactic sugar that expands into a v-on handler for updating the bound value. See this.

Lifecycle Hooks

  • beforeCreate called before the app is created
  • created called after the app is created
  • beforeMount called before the app is mounted on the DOM
  • mounted called after the app is mounted on the DOM
  • beforeDestroy called before the app is destroyed
  • destroyed called after the app is destroyed
  • beforeUpdate called before a property is updated
  • updated called after a property is updated
  • activated called when a kept-alive component is activated
  • deactivated called when a kept-alive component is deactivated

Built-in components

Vue provides 5 built-in components:

  • <component>
  • <transition>
  • <transition-group>
  • <keep-alive>
  • <slot>

Global Configuration of the Vue object

The Vue.config object has these properties, which you can modify when you create the instance:

silentdefaults to false, if true suppress logs and warnings
optionMergeStrategiesallows to define a custom merging strategy for options
devtoolsdefaults to true in development, and false in production. You can override those values.
errorHandlerallows to set an error handler function. Useful to hook Sentry and other similar services
warnHandlerallows to set a warning handler function, similar to errorHandler, but for warnings instead of errors
ignoredElementsused to let Vue ignore custom elements defined outside of it, like Web Components.
keyCodeslet you define custom key aliases for v-on
performancedefaults to false. If set to true, traces the performance of Vue components in the Browser DevTools.
productionTipdefaults to true. Set to false to disable the warning "you're in development mode" during development in the console.

Methods of the Vue object

Vue.extendallows to subclass the Vue object, to create a custom profile
Vue.nextTickdefers the callback to be executed after the next DOM update cycle
Vue.setadd a property to the object
Vue.deletedelete a property from the object
Vue.directiveset (or get) a global directive
Vue.filterset (or get) a global filter
Vue.componentset (or get) a global component
Vue.useinstall a Vue.js plugin
Vue.mixinset a global mixin
Vue.compilecompile a template string into a render function
Vue.versionreturns the currently installed version of Vue

Options passed to a Vue object

When initializing a Vue object, you pass in an object:

const vm = new Vue({


This object accepts a number of properties.

dataallows to pass a set of reactive data that will be used by the Vue app. All reactive properties must be added at initialization time, you can't add new ones later.
propsit's a set of attributes that are exposed to parent components as input data.
propsDatadefault data for props. Only useful during testing
methodsa set of methods that are defined on the Vue instance
computedlike methods, but cached internally
watchallows to watch properties, and call a function when they change

Example of defining data, methods and computed properties:

var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  methods: {
    reverseMessageAsMethod: function () {
      return this.message.split('').reverse().join('')
  computed: {
    // a computed getter
    reversedMessage: function () {
      // `this` points to the vm instance
      return this.message.split('').reverse().join('')

console.log(vm.reverseMessageAsMethod) // => 'olleH'
vm.message = 'Goodbye'
console.log(vm.reversedMessage) // => 'eybdooG'


  • el sets the DOM element where the instance mounts on. It can be a CSS Selector, or an HTMLElement
  • template is a template, represented as a string, that will replace the mounted element
  • render alternatively to define the template, you can define a template using a render function
  • renderError set an alternative output when the function attached to render fails

Vue instance assets

  • directives the set of directives to associate to the Vue instance
  • filters the set of filters to associate to the Vue instance
  • components the set of components to associate to the Vue instance

Vue composition options

  • parent specifies the parent instance
  • mixins sets an array of mixin objects
  • extends extend another component

Other Vue object options

  • name setting a name to the component lets you invoke it, useful in debugging or when you need to recursively add a component in its template
  • functional if true, sets the component to be stateless (no data) and instanceless (no this), making it more lightweight
  • model allows to customize the property used in events, useful for example when interacting with forms
  • comments defaults to false. If set to true, retains the HTML comments that are put in templates

Instance properties

Given an instance of Vue, stored into a variable const vm = new Vue(/*...*/), you can inspect and interact with it.

Properties of a Vue instance

  • vm.$data the data object associated to the instance
  • vm.$props the props the instance has received
  • vm.$el the DOM element to which the instance is bound
  • vm.$options the object used to instantiate the Vue instance
  • vm.$parent the parent instance
  • vm.$root the root instance (if this is the root instance, this points to itself)
  • vm.$children an array of children instances
  • vm.$slots an array of the associated slots contained in the template
  • vm.$scopedSlots an array of the associated scoped slots
  • vm.$refs an object that contains a property for each element pointed by a ref attribute defined in the template
  • vm.$isServer true if the Vue instance is running on the server (useful in server-side rendering)
  • vm.$attrs an object of attributes that are provided to the component but not defined as props
  • vm.$listeners an object of v-on event listeners assigned to the component

Methods Data

  • vm.$watch set up a watcher for property changes in the Vue data. It can also watch for value changes inside objects
  • vm.$set set a property
  • vm.$delete delete a property


  • vm.$emit triggers a custom event on the vm Vue instance
  • vm.$on listen for a custom event on the vm Vue instance
  • vm.$once like $on, but listens only once
  • vm.$off removes an event listener from the Vue instance

Lifecycle Methods

  • vm.$mount mount a Vue instance on a DOM element, in case it was not mounted yet
  • vm.$forceUpdate force the vm Vue instance to re-render. Does not force child components to rerender.
  • vm.$nextTick accepts a callback and schedules that for the next DOM update cycle
  • vm.$destroy destroys the application and remove all child components, observers and listeners
→ Download my free JavaScript Handbook!



You might be interested in those things I do:

  • Learn to code in THE VALLEY OF CODE, your your web development manual
  • Find a ton of Web Development projects to learn modern tech stacks in practice in THE VALLEY OF CODE PRO
  • I wrote 16 books for beginner software developers, DOWNLOAD THEM NOW
  • Every year I organize a hands-on cohort course coding BOOTCAMP to teach you how to build a complex, modern Web Application in practice (next edition February-March-April-May 2024)
  • Learn how to start a solopreneur business on the Internet with SOLO LAB (next edition in 2024)
  • Find me on X

Related posts that talk about vue: