nuxt-snippets
v1.6.2
Published
Snippets for vue/nuxt projects
Maintainers
Readme
Installation
- You can do it by finding
Vue & Nuxt Snippetsbypraburangkiin VS Code marketplace and clicking install. - Or you can follow this link and click install.
Snippet syntax
Tabstops
$1,$2,$3specify cursor locations, in order in which tabstops will be visited$0denotes the final cursor position- Multiple occurrences of the same tabstop are linked and updated in sync
Placeholders
- Tabstops with default values →
${1:name}
Choices
- Tabstops with multiple values →
${1|one,two,three|}. - Truncated in documentation, for easier viewing →
${1|one,...|}.
Snippets
Vue SFC
.vue files
<script lang="ts" setup>
$0
</script>
<template>
$1
</template>
<script lang="ts" setup>
$0
</script>
<template>
$1
</template>
<style lang="postcss" scoped>
</style>
<script lang="ts" setup>
$0
</script>
<template>
$1
</template>
<style lang="css" scoped>
</style>
<script lang="ts" setup>
$0
</script>
<template>
$1
</template>
<style lang="scss" scoped>
</style>
<script lang="ts" setup>
$0
</script>
<template>
$1
</template>
<style lang="less" scoped>
</style>
<script lang="ts" setup>
$0
</script>
<template>
$0
</template>
<style lang="postcss" scoped>
$0
</style>
<style lang="${1|css,postcss,...|}"${2|scoped,|}>
$0
</style>
<style lang="css" scoped>
$0
</style>
<style lang="scss" scoped>
$0
</style>
<style lang="less" scoped>
$0
</style>
<style module$1>
$0
</style>
<style scoped src="$1">
$0
</style>
Template
<slot$1>$0</slot><slot name="${1:default}">
$0
</slot><template #${1:default}>
$0
</template><component :is="$1">$0</component><keep-alive $1>
$0
</keep-alive><teleport to="$1">
$0
</teleport><transition $1>
$0
</transition><transition name="$1" $2>
$0
</transition><transition type="${1|transition,animation|}" $2>
$0
</transition><transition appear $1>
$0
</transition><transition-group name="$1" as="${2|ul,div,...|}" $3>
$0
</transition-group><suspense>
$0
</suspense><suspense>
$0
<template #fallback>
$1
</template>
</suspense>v-text="$1"v-html="$1"v-show="$1"v-if="$1"v-else-if="$1"v-elsev-for="${2:item} in ${1:items}" :key="$2$3"v-for="(${2:item}, ${3:i}) in ${1:items}" :key="${4:$3}"v-for="${1:n} in ${2:5}" :key="$1"emit('$1'$2)@${1|click,input,...|}="\$emit('${2:$1}', \$event)"v-on="${1:emits}"@$1="$2"@click="${1:onClick}"@input="${1:onInput}"@update="${1:onUpdate}"@change="${1:onChange}"@blur="${1:onBlur}"@focus="${1:onFocus}"@submit${1:.prevent}="${2:onSubmit}"v-bind="$1"v-bind="\$attrs"v-bind="\$props"v-bind="[\$props, \$attrs]"v-model="$1"v-model.number="$1"v-model.trim="$1"v-model:${1:custom}="$2"v-slot="{$1}"v-pre="$1"v-oncev-memo="[$1]"v-cloak:key="$1"ref="$1"${1|name,:name|}="$2"${1|is,:is|}="$2":${1:prop}="${2:$1}"${1:prop}="$2":class="$1":class="[$1]":class="{ $1: $2 }":style="{ $1: $2 }":style="[$1]"{{ $1 }}{{ $t('$1') }}v-if="\$slots.${1:default}"v-if="\$slots.${1:label} || ${2:$1}"<${1|template,div,...|} v-for="${3:item} in ${2:items}" :key="$3$4">
$0
</$1><${1|template,div,...|} v-for="(${3:item}, ${4:i}) in ${2:items}" :key="${5:$4}">
$0
</$1><${1|template,div,...|} v-if="$2">
$0
</$1><template v-if="$2">
$0
</template>Script
Script setup and composables
const ${1:name} = ref($2)const ${1:name} = ref<$2>($3)const ${1:name} = computed(() => $2)const ${1:name} = computed<$2>(() => $3)const ${1:name} = computed({
get: () => ${2},
set: (${3:value}: ${4:string}) => {
${5}
},
})const ${1:name} = reactive({$2})const ${1:name}: ${2:type} = reactive({$3})const ${1:name} = shallowRef($2)toRef(${1:props}, '$2')toRefs(${1:props})unref($1)readonly(${1:object})const ${1:elem} = ref<${2|HTMLInputElement,HTMLInputElement,...|} | null>(null)watchEffect(() => {
$0
})watch(${1:source}, (${2:val}) => {
$0
})watch(${1:source}, ${2:fn})watch(
() => ${1:source},
(${2:val}) => {
$0
})watch(
[${1:source1}, ${2:source2}]
([$1, $2]) => {
$0
}
)watch(
${1:source},
(${2:val}) => {
$0
},
{ immediate: true }
)watch(
${1:source},
(${2:val}) => {
$0
},
{ deep: true }
)${1:const props = }defineProps<${2:Props}>()${1:const props = }withDefaults(defineProps<${2:Props}>(), {
$0
})${1:const emit = }defineEmits<{
${2:click}: [${3:payload}: ${4:string}],$5
}>()const ${1:modelValue} = defineModel<${2:string}>($3)emit('$1'$2)defineExpose({
$1
})onMounted(async () => {
$0
})onBeforeMount(() => {
$0
})onUnmounted(() => {
$0
})onBeforeUnmount(() => {
$0
})onUpdated(() => {
$0
})onBeforeUpdate(() => {
$0
})onErrorCaptured(() => {
$0
})onActivated(() => {
$0
})onDeactivated(() => {
$0
})provide(${1:key}, ${2:value})provide<${1:string}>(${2:key}, ${3:value})const ${1:value} = inject(${2:key})const ${1:value} = inject<${2:string}>(${3:key})const ${1:value} = inject(${2:key}, ${3:defaultValue})const ${1:key}: InjectionKey<${3:string}> = Symbol('$2')const slots = useSlots()const attrs = useAttrs()import { $1 } from 'vue'Code snippets
Useful vue snippets and helpers
export function use${1/(.*)/${1:/pascalcase}/}() {
$0
return {
}
}
export function ${TM_FILENAME_BASE/^(.*)$/${1:/pascalcase}/}() {
$0
return {
}
}
const ${2:$1} = use${1/(.*)/${1:/capitalize}/}($3)const { $2 } = use${1/(.*)/${1:/capitalize}/}($3)const slots = useSlots()
function hasSlot(name: string) {
return !!slots[name]
}Nuxt (script)
const { data: ${1:data} } = await useFetch('$2'$3)const { data: ${1:data} } = await useFetch(() => '$2'$3)const { pending, data: ${1:data} } = useLazyFetch('$2'$3)const { pending, data: ${1:data} } = useLazyFetch(() => '$2'$3)const { data: ${1:data} } = await useFetch('$2', {
method: 'POST',
body: ${3:body},$4
})const { data: ${1:data} } = await useAsyncData('${2:key}', () => $fetch('$3')$4)const { pending, data: ${1:data} } = useLazyAsyncData('${2:key}', () => $fetch('$3')$4)const app = useNuxtApp()const appConfig = useAppConfig()const config = useRuntimeConfig()const ${1:cookie} = useCookie('${2:$1}'$3)const ${1:cookie} = useCookie('${2:$1}', { $3 })const { data: ${2:$1} } = useNuxtData('${1:key}')const ${1:error} = useError()const ${1:state} = useState('${2:$1}'$3)const ${1:state} = useState('${2:$1}', () => $3)useHead({
$1
})useHead({
title: $1,$0
})definePageMeta({
$1
})definePageMeta({
title: '$1',$0
})definePageMeta({
layout: '$1',$0
})definePageMeta({
middleware: ['$1'$2],$0
})navigateTo('$1'$2)navigateTo({ $1 }$2)navigateTo('$1', { replace: true })navigateTo('$1', { external: true })navigateTo('$1', { redirectCode: ${2|301,302,...|} })navigateTo({
name: '$1',$0
})navigateTo({
path: '$1',$0
})export default defineNuxtPlugin((nuxtApp) => {
$1
})export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use($1)
})export default defineNuxtRouteMiddleware((to, from) => {
$1
})export default defineEventHandler((event) => {
$1
})export default defineEventHandler(${1:async }(event) => {
$2
return {
$3
}
})export default defineNitroPlugin((nitroApp) => {
$1
})const ${1:body} = await readBody(event)const { $1 } = getQuery(event)getCookie(event, '${1:cookie}')setCookie(event, '${1:cookie}', ${2:value})Nuxt (template)
<NuxtLink ${1|to,:to|}="$2">$3</NuxtLink><NuxtLink ${1|to,:to|}="$2" target="_blank" $3>$4</NuxtLink><NuxtLink ${1|to,:to|}="$2" external target="${3|_blank,_self|}" $4>$5</NuxtLink><NuxtLink :to="`$1${${2:id}}$3`" $4>$5</NuxtLink><NuxtLink :to="{ $1 }" $2>$3</NuxtLink><NuxtLink :to="{ name: '$1'$2 }" $3>$4</NuxtLink><NuxtLink :to="{ path: '$1'$2 }" $3>$4</NuxtLink><NuxtLoadingIndicator $1/><NuxtLayout $1>$2</NuxtLayout><NuxtLayout ${2|name,:name|}="$3">$4</NuxtLayout><NuxtPage $1/><NuxtPage page-key="static" $1/><ClientOnly $1>$2</ClientOnly><ClientOnly fallback-tag="${1:span}" fallback="${2:Loading...}">$3</ClientOnly><ClientOnly>
<template #fallback>
$0
</template>
</ClientOnly><Teleport to="$1">
$0
</Teleport>Pinia
import { defineStore } from 'pinia'
export const use${TM_FILENAME_BASE/^(.*)$/${1:/pascalcase}/}Store = defineStore('$TM_FILENAME_BASE', () => {
$0
return {
}
})
import { defineStore } from 'pinia'
export const use${TM_FILENAME_BASE/^(.*)$/${1:/pascalcase}/}Store = defineStore('$TM_FILENAME_BASE', {
state: () => ({
$0
}),
getters: {},
actions: {},
})
const ${2:$1Store} = use${1/(.*)/${1:/capitalize}/}Store()Vue Router (script)
const ${1:router} = useRouter()const ${1:route} = useRoute()const router = createRouter({
history: createWebHashHistory(),
routes: ${1:routes},
scrollBehavior(to, from, savedPosition) {
$2
}
})Vue Router (template)
${1|to,:to|}="$2":to="`$1${${2:id}}$3`":to="{ $1 }":to="{ name: '$1',$2 }":to="{ path: '$1',$2 }"<RouterView>
$0
</RouterView><RouterLink ${1|to,:to|}="$2">$3</RouterLink><RouterLink :to="`$1${${2:id}}$3`">$4</RouterLink><RouterLink :to="{ $1 }">$2</RouterLink><RouterLink :to="{ name: '$1'$2 }">$3</RouterLink><RouterLink :to="{ path: '$1'$2 }">$3</RouterLink>Javascript
import ${2:moduleName} from '${1:module}';$0import '${1:module}';$0import { $2 } from '${1:module}';$0import * as ${2:alias} from '${1:module}';$0import { ${2:originalName} as ${3:alias} } from '${1:module}';$0require('${1:package}');const ${1:packageName} = require('${1:package}');$0module.exports = {
$0
};
${1:array}.${2|map,filter,...|}((${3:element}) => {
$0
});