Cheat Sheet

VueJS Cheat Sheet


1. Create a New Vue Project


vue create my-project

2. Install Vue CLI


npm install -g @vue/cli

3. Create a New Vue Component


// MyComponent.vue
<template>
  <div>Hello, World!</div>
</template>
<script>
export default {
  name: 'MyComponent'
}
</script>
<style scoped>
/* Add styles here */
</style>

4. Use Vue Router


// main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
Vue.use(VueRouter)
const routes = [
  {
    path: '/',
    name: 'home',
    component: Home
  },
  {
    path: '/about',
    name: 'about',
    component: About
  }
]
const router = new VueRouter({
  routes
})
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

5. Use Vuex for State Management


// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  actions: {
    increment({ commit }) {
      commit('increment')
    }
  }
})
export default store

6. Use Vue's Built-in Directives


// MyComponent.vue
<template>
  <div v-if=`show`>Hello, World!</div>
  <div v-else>Goodbye, World!</div>
</template>
<script>
export default {
  data() {
    return {
      show: true
    }
  }
}
</script>

7. Use Vue's Built-in Filters


// MyComponent.vue
<template>
  <div>{{ message | uppercase }}</div>
</template>
<script>
export default {
  data() {
    return {
      message: 'hello world'
    }
  },
  filters: {
    uppercase(value) {
      return value.toUpperCase()
    }
  }
}
</script>

8. Use Vue's Built-in Lifecycle Hooks


// MyComponent.vue
<template>
  <div>Hello, World!</div>
</template>
<script>
export default {
  mounted() {
    console.log('Component mounted')
  }
}
</script>

9. Use Vue's Built-in Event Handling


// MyComponent.vue
<template>
  <button @click=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

10. Use Vue's Built-in Form Handling


// MyComponent.vue
<template>
  <form @submit.prevent=`handleSubmit`>
    <input type=`text` v-model=`name` />
    <button type=`submit`>Submit</button>
  </form>
</template>
<script>
export default {
  data() {
    return {
      name: ''
    }
  },
  methods: {
    handleSubmit() {
      console.log('Form submitted')
    }
  }
}
</script>

11. Use Vue's Built-in Animation and Transition


// MyComponent.vue
<template>
  <transition name=`fade`>
    <div v-if=`show`>Hello, World!</div>
  </transition>
</template>
<script>
export default {
  data() {
    return {
      show: true
    }
  }
}
</script>
<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

12. Use Vue's Built-in Internationalization


// MyComponent.vue
<template>
  <div>{{ $t('hello') }}</div>
</template>
<script>
export default {
  i18n: {
    messages: {
      en: {
        hello: 'Hello, World!'
      },
      fr: {
        hello: 'Bonjour, monde!'
      }
    }
 }
  }
}
</script>

13. Use Vue's Custom Directives


// main.js
Vue.directive('focus', {
  // When the bound element is inserted into the DOM...
  inserted: function (el) {
    // Focus the element
    el.focus()
  }
})
// MyComponent.vue
<template>
  <input v-focus />
</template>

14. Use Vue's Slots


// MyComponent.vue
<template>
  <div>
    <slot></slot>
  </div>
</template>
// ParentComponent.vue
<template>
  <MyComponent>
    <p>This is a slot content!</p>
  </MyComponent>
</template>

15. Use Vue's Scoped Slots


// MyComponent.vue
<template>
  <div>
    <slot :message=`message`></slot>
  </div>
</template>
<script>
export default {
  data() {
    return {
      message: 'Hello from scoped slot!'
    }
  }
}
</script>
// ParentComponent.vue
<template>
  <MyComponent>
    <template v-slot:default=`slotProps`>
      <p>{{ slotProps.message }}</p>
    </template>
  </MyComponent>
</template>

16. Use Vue's Mixins


// mixin.js
export const myMixin = {
  data() {
    return {
      mixinData: 'Hello from mixin!'
    }
  }
}
// MyComponent.vue
<template>
  <div>{{ mixinData }}</div>
</template>
<script>
import { myMixin } from './mixin'
export default {
  mixins: [myMixin]
}
</script>

17. Use Vue's Provide/Inject


// ParentComponent.vue
<template>
  <ChildComponent />
</template>
<script>
export default {
  provide() {
    return {
      message: 'Hello from parent!'
    }
  }
}
// ChildComponent.vue
<template>
  <div>{{ message }}</div>
</template>
<script>
export default {
  inject: ['message']
}
</script>

18. Use Vue's Async Components


// main.js
const AsyncComponent = () => import('./AsyncComponent.vue')
// App.vue
<template>
  <AsyncComponent />
</template>

19. Use Vue's Filters


// MyComponent.vue
<template>
  <div>{{ message | capitalize }}</div>
</template>
<script>
export default {
  data() {
    return {
      message: 'hello world'
    }
  },
  filters: {
    capitalize(value) {
      return value.charAt(0).toUpperCase() + value.slice(1)
    }
  }
}
</script>

20. Use Vue's Event Bus


// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()
// ComponentA.vue
import { EventBus } from './eventBus'
EventBus.$emit('eventName', data)
// ComponentB.vue
import { EventBus } from './eventBus'
EventBus.$on('eventName', (data) => {
  console.log(data)
})

21. Use Vue's Watchers


// MyComponent.vue
<template>
  <div>{{ count }}</div>
</template>
<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  watch: {
    count(newValue) {
      console.log('Count changed to:', newValue)
    }
  }
}
</script>

22. Use Vue's Computed Properties


// MyComponent.vue
<template>
  <div>{{ doubledCount }}</div>
</template>
<script>
export default {
  data() {
    return {
      count: 1
    }
  },
  computed: {
    doubledCount() {
      return this.count * 2
    }
  }
}
</script>

23. Use Vue's Dynamic Components


// App.vue
<template>
  <component :is=`currentComponent`></component>
</template>
<script>
export default {
  data() {
    return {
      currentComponent: 'MyComponent'
    }
  }
}
</script>

24. Use Vue's Transition Group


// MyComponent.vue
<template>
  <transition-group name=`fade` tag=` div`>
    <div v-for=`item in items` :key=`item.id`>{{ item.text }}</div>
  </transition-group>
</template>
<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    }
  }
}
</script>
<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

25. Use Vue's Global Components


// main.js
import Vue from 'vue'
import MyComponent from './MyComponent.vue'
Vue.component('MyComponent', MyComponent)
// App.vue
<template>
  <MyComponent />
</template>

26. Use Vue's Custom Events


// MyComponent.vue
<template>
  <button @click=`$emit('custom-event', 'Hello!')`>Click me!</button>
</template>
// ParentComponent.vue
<template>
  <MyComponent @custom-event=`handleCustomEvent` />
</template>
<script>
export default {
  methods: {
    handleCustomEvent(message) {
      console.log(message)
    }
  }
}
</script>

27. Use Vue's v-model for Two-Way Data Binding


// MyComponent.vue
<template>
  <input v-model=`name` />
  <p>Your name is: {{ name }}</p>
</template>
<script>
export default {
  data() {
    return {
      name: ''
    }
  }
}
</script>

28. Use Vue's v-for for Rendering Lists


// MyComponent.vue
<template>
  <ul>
    <li v-for=`item in items` :key=`item.id`>{{ item.text }}</li>
  </ul>
</template>
<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    }
  }
}
</script>

29. Use Vue's v-bind for Dynamic Attributes


// MyComponent.vue
<template>
  <img v-bind:src=`imageSrc` alt=`Image` />
</template>
<script>
export default {
  data() {
    return {
      imageSrc: 'https://example.com/image.jpg'
    }
  }
}
</script>

30. Use Vue's v-if and v-else for Conditional Rendering


// MyComponent.vue
<template>
  <div>
    <p v-if=`isVisible`>Visible</p>
    <p v-else>Not Visible</p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isVisible: true
    }
  }
}
</script>

31. Use Vue's v-show for Toggling Visibility


// MyComponent.vue
<template>
  <div>
    <p v-show=`isVisible`>Visible</p>
    <button @click=`isVisible = !isVisible`>Toggle</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isVisible: true
    }
  }
}
</script>

32. Use Vue's v-cloak for Preventing Flash of Unstyled Content


// MyComponent.vue
<template>
  <div v-cloak>
    <p>Hello, World!</p>
  </div>
</template>
<style>
[v-cloak] {
  display: none;
}
</style>

33. Use Vue's v-pre for Skipping Compilation


// MyComponent.vue
<template>
  <div v-pre>
    <p>{{ this will not be compiled }}</p>
  </div>
</template>

34. Use Vue's v-on for Event Handling


// MyComponent.vue
<template>
  <button v-on:click=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
</script>

35. Use Vue's v-slot for Named Slots


// MyComponent.vue
<template>
  <div>
    <slot name=`header`></slot>
    <slot></slot>
    <slot name=`footer`></slot>
  </div>
</template>
// ParentComponent.vue
<template>
  <MyComponent>
    <template v-slot:header>
      <h1>Header Content</h1>
    </template>
    <p>Main Content</p>
    <template v-slot:footer>
      <p>Footer Content</p>
    </template>
  </MyComponent>
</template>

36. Use Vue's v-bind for Dynamic Classes


// MyComponent.vue
<template>
  <div v-bind:class=`{ active: isActive }`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isActive: true
    }
  }
}
</script>

37. Use Vue's v-bind for Dynamic Styles


// MyComponent.vue
<template>
  <div v-bind:style=`{ color: textColor }`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      textColor: 'red'
    }
  }
}
</script>

38. Use Vue's v-on for Event Modifiers


// MyComponent.vue
<template>
  <button v-on:click.prevent=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

39. Use Vue's v-model for Custom Components


// MyInput.vue
<template>
  <input :value=`value` @input=`$emit('input', $event.target.value)` />
</template>
<script>
export default {
  props: ['value']
}
</script>
// ParentComponent.vue
<template>
  <MyInput v-model=`name` />
</template>
<script>
export default {
  data() {
    return {
      name: ''
    }
  }
}
</script>

40. Use Vue's Filters for Formatting


// MyComponent.vue
<template>
  <div>{{ price | currency }}</div>
</template>
<script>
export default {
  data() {
    return {
      price: 100
    }
  },
  filters: {
    currency(value) {
      return `$${value.toFixed(2)}`
    }
  }
}
</script>

41. Use Vue's Global Mixins


// main.js
Vue.mixin({
  created() {
    console.log('Global mixin created hook')
  }
})
// MyComponent.vue
<template>
  <div>Hello, World!</div>
</template>

42. Use Vue's Custom Plugins


// myPlugin.js
export default {
  install(Vue) {
    Vue.prototype.$myMethod = function() {
      console.log('My method called!')
    }
  }
}
// main.js
import MyPlugin from './myPlugin'
Vue.use(MyPlugin)
// MyComponent.vue
<template>
  <button @click=`$myMethod()`>Call My Method</button>
</template>

43. Use Vue's Async Data Fetching


// MyComponent.vue
<template>
  <div>{{ data }}</div>
</template>
<script>
export default {
  data() {
    return {
      data: null
    }
  },
  async created() {
    const response = await fetch('https://api.example.com/data')
    this.data = await response.json()
  }
}
</script>

44. Use Vue's Dynamic Imports


// MyComponent.vue
<template>
  <button @click=`loadComponent`>Load Component</button>
  <component :is=`asyncComponent`></component>
</template>
<script>
export default {
  data() {
    return {
      asyncComponent: null
    }
  },
  methods: {
    async loadComponent() {
      this.asyncComponent = (await import('./AsyncComponent.vue')).default
    }
  }
}
</script>

45. Use Vue's Watchers for Deep Watching


// MyComponent.vue
<template>
  <div>{{ items }}</div>
</template>
<script>
export default {
  data() {
    return {
 items: []
    }
  },
  watch: {
    items: {
      handler(newValue) {
        console.log('Items changed:', newValue)
      },
      deep: true
    }
  }
}
</script>

46. Use Vue's Computed Properties for Caching


// MyComponent.vue
<template>
  <div>{{ fullName }}</div>
</template>
<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`
    }
  }
}
</script>

47. Use Vue's Event Handling with Modifiers


// MyComponent.vue
<template>
  <button @click.stop=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

48. Use Vue's v-bind for Object Syntax


// MyComponent.vue
<template>
  <div v-bind=`divAttributes`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      divAttributes: {
        id: 'myDiv',
        class: 'my-class'
      }
    }
  }
}
</script>

49. Use Vue's v-on for Multiple Event Handlers


// MyComponent.vue
<template>
  <button v-on:click=`handleClick1` v-on:click=`handleClick2`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick1() {
      console.log('First handler')
    },
    handleClick2() {
      console.log('Second handler')
    }
  }
}
</script>

50. Use Vue's v-if with v-else-if and v-else


// MyComponent.vue
<template>
  <div>
    <p v-if=`status === 'loading'`>Loading...</p>
    <p v-else-if=`status === 'error'`>Error occurred!</p>
    <p v-else>Data loaded successfully!</p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      status: 'loading'
    }
  }
}
</script>

51. Use Vue's v-for with Index


// MyComponent.vue
<template>
  <ul>
    <li v-for=`(item, index) in items` :key=`index`>{{ index + 1 }}. {{ item }}</li>
  </ul>
</template>
<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3']
    }
  }
}
</script>

52. Use Vue's v-bind for Dynamic Classes with Conditions


// MyComponent.vue
<template>
  <div :class=`{ active: isActive, 'text-danger': hasError }`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isActive: true,
      hasError: false
    }
  }
}
</script>

53. Use Vue's v-bind for Dynamic Styles with Computed Properties


// MyComponent.vue
<template>
  <div :style=`styleObject`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isRed: true
    }
  },
  computed: {
    styleObject() {
      return {
        color: this.isRed ? 'red' : 'blue'
      }
    }
  }
}
</script>

54. Use Vue's v-on for Key Modifiers


// MyComponent.vue
<template>
  <input @keyup.enter=`handleEnter` />
</template>
<script>
export default {
  methods: {
    handleEnter() {
      console.log('Enter key pressed')
    }
  }
}
</script>

55. Use Vue's v-model with Custom Components


// MyInput.vue
<template>
  <input :value=`value` @input=`$emit('input', $event.target.value)` />
</template>
<script>
export default {
  props: ['value']
}
</script>
// ParentComponent.vue
 <template>
  <MyInput v-model=`name` />
</template>
<script>
export default {
  data() {
    return {
      name: ''
    }
  }
}
</script>

56. Use Vue's v-for with Object Syntax


// MyComponent.vue
<template>
  <ul>
    <li v-for=`(value, key) in items` :key=`key`>{{ key }}: {{ value }}</li>
  </ul>
</template>
<script>
export default {
  data() {
    return {
      items: {
        item1: 'Value 1',
        item2: 'Value 2',
        item3: 'Value 3'
      }
    }
  }
}
</script>

57. Use Vue's v-if with v-else-if and v-else for Complex Conditions


// MyComponent.vue
<template>
  <div>
    <p v-if=`status === 'loading'`>Loading...</p>
    <p v-else-if=`status === 'error'`>Error occurred!</p>
    <p v-else>Data loaded successfully!</p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      status: 'loading'
    }
  }
}
</script>

58. Use Vue's v-show for Conditional Rendering


// MyComponent.vue
<template>
  <div>
    <p v-show=`isVisible`>Visible</p>
    <button @click=`isVisible = !isVisible`>Toggle</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isVisible: true
    }
  }
}
</script>

59. Use Vue's v-cloak for Preventing Flash of Unstyled Content


// MyComponent.vue
<template>
  <div v-cloak>
    <p>Hello, World!</p>
  </div>
</template>
<style>
[v-cloak] {
  display: none;
}
</style>

60. Use Vue's v-pre for Skipping Compilation


// MyComponent.vue
<template>
  <div v-pre>
    <p>{{ this will not be compiled }}</p>
  </div>
</template>

61. Use Vue's v-on for Event Handling


// MyComponent.vue
<template>
  <button v-on:click=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

62. Use Vue's v-slot for Named Slots


// MyComponent.vue
<template>
  <div>
    <slot name=`header`></slot>
    <slot></slot>
    <slot name=`footer`></slot>
  </div>
</template>
// ParentComponent.vue
<template>
  <MyComponent>
    <template v-slot:header>
      <h1>Header Content</h1>
    </template>
    <p>Main Content</p>
    <template v-slot:footer>
      <p>Footer Content</p>
    </template>
  </MyComponent>
</template>

63. Use Vue's v-bind for Dynamic Classes


// MyComponent.vue
<template>
  <div v-bind:class=`{ active: isActive }`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isActive: true
    }
  }
}
</script>

64. Use Vue's v-bind for Dynamic Styles


// MyComponent.vue
<template>
  <div v-bind:style=`{ color: textColor }`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      textColor: 'red'
    }
  }
}
</script>

65. Use Vue's v-on for Event Modifiers


// MyComponent.vue
<template>
  <button v-on:click.prevent=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

66. Use Vue's v-model for Custom Components


// MyInput.vue
<template>
  <input : value=`value` @input=`$emit('input', $event.target.value)` />
</template>
<script>
export default {
  props: ['value']
}
</script>
// ParentComponent.vue
<template>
  <MyInput v-model=`name` />
</template>
<script>
export default {
  data() {
    return {
      name: ''
    }
  }
}
</script>

67. Use Vue's Filters for Formatting


// MyComponent.vue
<template>
  <div>{{ price | currency }}</div>
</template>
<script>
export default {
  data() {
    return {
      price: 100
    }
  },
  filters: {
    currency(value) {
      return `$${value.toFixed(2)}`
    }
  }
}
</script>

68. Use Vue's Global Mixins


// main.js
Vue.mixin({
  created() {
    console.log('Global mixin created hook')
  }
})
// MyComponent.vue
<template>
  <div>Hello, World!</div>
</template>

69. Use Vue's Custom Plugins


// myPlugin.js
export default {
  install(Vue) {
    Vue.prototype.$myMethod = function() {
      console.log('My method called!')
    }
  }
}
// main.js
import MyPlugin from './myPlugin'
Vue.use(MyPlugin)
// MyComponent.vue
<template>
  <button @click=`$myMethod()`>Call My Method</button>
</template>

70. Use Vue's Async Data Fetching


// MyComponent.vue
<template>
  <div>{{ data }}</div>
</template>
<script>
export default {
  data() {
    return {
      data: null
    }
  },
  async created() {
    const response = await fetch('https://api.example.com/data')
    this.data = await response.json()
  }
}
</script>

71. Use Vue's Dynamic Imports


// MyComponent.vue
<template>
  <button @click=`loadComponent`>Load Component</button>
  <component :is=`asyncComponent`></component>
</template>
<script>
export default {
  data() {
    return {
      asyncComponent: null
    }
  },
  methods: {
    async loadComponent() {
      this.asyncComponent = (await import('./AsyncComponent.vue')).default
    }
  }
}
</script>

72. Use Vue's Watchers for Deep Watching


// MyComponent.vue
<template>
  <div>{{ items }}</div>
</template>
<script>
export default {
  data() {
    return {
      items: []
    }
  },
  watch: {
    items: {
      handler(newValue) {
        console.log('Items changed:', newValue)
      },
      deep: true
    }
  }
}
</script>

73. Use Vue's Computed Properties for Caching


// MyComponent.vue
<template>
  <div>{{ fullName }}</div>
</template>
<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`
    }
  }
}
</script>

74. Use Vue's Event Handling with Modifiers


// MyComponent.vue
<template>
  <button @click.stop=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

75. Use Vue's v-bind for Object Syntax


// MyComponent.vue
<template>
  <div v-bind=`divAttributes`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      divAttributes: {
        id: 'myDiv',
        class: 'my-class'
      }
    }
  }
}
</script>

76. Use Vue's v-on for Multiple Event Handlers


// MyComponent.vue
<template>
  <button v-on:click=`handleClick1` v-on:click=`handleClick2`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick1() {
      console.log('First handler')
    },
    handleClick2() {
      console.log('Second handler')
 }
  }
}
</script>

77. Use Vue's v-if with v-else-if and v-else for Complex Conditions


// MyComponent.vue
<template>
  <div>
    <p v-if=`status === 'loading'`>Loading...</p>
    <p v-else-if=`status === 'error'`>Error occurred!</p>
    <p v-else>Data loaded successfully!</p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      status: 'loading'
    }
  }
}
</script>

78. Use Vue's v-for with Index


// MyComponent.vue
<template>
  <ul>
    <li v-for=`(item, index) in items` :key=`index`>{{ index + 1 }}. {{ item }}</li>
  </ul>
</template>
<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3']
    }
  }
}
</script>

79. Use Vue's v-bind for Dynamic Classes with Conditions


// MyComponent.vue
<template>
  <div :class=`{ active: isActive, 'text-danger': hasError }`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isActive: true,
      hasError: false
    }
  }
}
</script>

80. Use Vue's v-bind for Dynamic Styles with Computed Properties


// MyComponent.vue
<template>
  <div :style=`styleObject`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isRed: true
    }
  },
  computed: {
    styleObject() {
      return {
        color: this.isRed ? 'red' : 'blue'
      }
    }
  }
}
</script>

81. Use Vue's v-on for Key Modifiers


// MyComponent.vue
<template>
  <input @keyup.enter=`handleEnter` />
</template>
<script>
export default {
  methods: {
    handleEnter() {
      console.log('Enter key pressed')
    }
  }
}
</script>

82. Use Vue's v-model with Custom Components


// MyInput.vue
<template>
  <input :value=`value` @input=`$emit('input', $event.target.value)` />
</template>
<script>
export default {
  props: ['value']
}
</script>
// ParentComponent.vue
<template>
  <MyInput v-model=`name` />
</template>
<script>
export default {
  data() {
    return {
      name: ''
    }
  }
}
</script>

83. Use Vue's Filters for Formatting


// MyComponent.vue
<template>
  <div>{{ price | currency }}</div>
</template>
<script>
export default {
  data() {
    return {
      price: 100
    }
  },
  filters: {
    currency(value) {
      return `$${value.toFixed(2)}`
    }
  }
}
</script>

84. Use Vue's Global Mixins


// main.js
Vue.mixin({
  created() {
    console.log('Global mixin created hook')
  }
})
// MyComponent.vue
<template>
  <div>Hello, World!</div>
</template>

85. Use Vue's Custom Plugins


// myPlugin.js
export default {
  install(Vue) {
    Vue.prototype.$myMethod = function() {
      console.log('My method called!')
    }
  }
}
// main.js
import MyPlugin from './myPlugin'
Vue.use(MyPlugin)
// MyComponent.vue
<template>
  <button @click=`$myMethod()`>Call My Method</button>
</template>

86. Use Vue's Async Data Fetching


// MyComponent.vue
<template>
  <div>{{ data }}</div>
</template>
<script>
export default {
  data() {
    return {
      data: null
    }
  },
  async created() {
    const response = await fetch('https://api.example.com/data')
    this.data = await response.json()
  }
}
</script>

87. Use Vue's Dynamic Imports


// MyComponent.vue
<template <button @click=`loadComponent`>Load Component</button>
  <component :is=`asyncComponent`></component>
</template>
<script>
export default {
  data() {
    return {
      asyncComponent: null
    }
  },
  methods: {
    async loadComponent() {
      this.asyncComponent = (await import('./AsyncComponent.vue')).default
    }
  }
}
</script>

88. Use Vue's Watchers for Deep Watching


// MyComponent.vue
<template>
  <div>{{ items }}</div>
</template>
<script>
export default {
  data() {
    return {
      items: []
    }
  },
  watch: {
    items: {
      handler(newValue) {
        console.log('Items changed:', newValue)
      },
      deep: true
    }
  }
}
</script>

89. Use Vue's Computed Properties for Caching


// MyComponent.vue
<template>
  <div>{{ fullName }}</div>
</template>
<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`
    }
  }
}
</script>

90. Use Vue's Event Handling with Modifiers


// MyComponent.vue
<template>
  <button @click.stop=`handleClick`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

91. Use Vue's v-bind for Object Syntax


// MyComponent.vue
<template>
  <div v-bind=`divAttributes`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      divAttributes: {
        id: 'myDiv',
        class: 'my-class'
      }
    }
  }
}
</script>

92. Use Vue's v-on for Multiple Event Handlers


// MyComponent.vue
<template>
  <button v-on:click=`handleClick1` v-on:click=`handleClick2`>Click me!</button>
</template>
<script>
export default {
  methods: {
    handleClick1() {
      console.log('First handler')
    },
    handleClick2() {
      console.log('Second handler')
    }
  }
}
</script>

93. Use Vue's v-if with v-else-if and v-else for Complex Conditions


// MyComponent.vue
<template>
  <div>
    <p v-if=`status === 'loading'`>Loading...</p>
    <p v-else-if=`status === 'error'`>Error occurred!</p>
    <p v-else>Data loaded successfully!</p>
  </div>
</template>
<script>
export default {
  data() {
    return {
      status: 'loading'
    }
  }
}
</script>

94. Use Vue's v-for with Index


// MyComponent.vue
<template>
  <ul>
    <li v-for=`(item, index) in items` :key=`index`>{{ index + 1 }}. {{ item }}</li>
  </ul>
</template>
<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3']
    }
  }
}
</script>

95. Use Vue's v-bind for Dynamic Classes with Conditions


// MyComponent.vue
<template>
  <div :class=`{ active: isActive, 'text-danger': hasError }`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isActive: true,
      hasError: false
    }
  }
}
</script>

96. Use Vue's v-bind for Dynamic Styles with Computed Properties


// MyComponent.vue
<template>
  <div :style=`styleObject`>Hello, World!</div>
</template>
<script>
export default {
  data() {
    return {
      isRed: true
    }
  },
  computed: {
    styleObject() {
      return {
        color: this.isRed ? 'red' : 'blue'
      }
    }
  }
}
</script>

97. Use Vue's v-on for Key Modifiers


// MyComponent.vue
<template>
  <input @keyup.enter=`handleEnter` />
</template>
<script>
export default {
  methods: {
    handleEnter() {
      console.log('Enter key pressed')
    }
  }
}
</script>

98. Use Vue's v-model with Custom Components


// MyInput.vue
<template>
  <input :value=`value` @input=`$emit('input', $event.target.value)` />
</template>
<script>
export default {
  props: ['value']
}
</script>
// ParentComponent.vue
<template>
  <MyInput v-model=`name` />
</template>
<script>
export default {
  data() {
    return {
      name: ''
    }
  }
}
</script>

99. Use Vue's Filters for Formatting


// MyComponent.vue
<template>
  <div>{{ price | currency }}</div>
</template>
<script>
export default {
  data() {
    return {
      price: 100
    }
  },
  filters: {
    currency(value) {
      return `$${value.toFixed(2)}`
    }
  }
}
</script>

100. Use Vue's Global Mixins


// main.js
Vue.mixin({
  created() {
    console.log('Global mixin created hook')
  }
})
// MyComponent.vue
<template>
  <div>Hello, World!</div>
</template>

Written by Surfside Media

Senior Full Stack Developer specializing in Web Technologies.