Components Basics â
āĻāĻĒāĻžāĻĻāĻžāύāĻā§āϞāĻŋ āĻāĻŽāĻžāĻĻā§āϰ UI-āĻā§ āϏā§āĻŦāĻžāϧā§āύ āĻāĻŦāĻ āĻĒā§āύāĻāĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝ āĻ āĻāĻļā§ āĻŦāĻŋāĻāĻā§āϤ āĻāϰāϤ⧠āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻ āĻāĻļāĻā§ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻāĻŋāύā§āϤāĻž āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻĒāĻā§ āύā§āϏā§āĻā§āĻĄ āĻāĻĒāĻžāĻĻāĻžāύā§āϰ āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϤ⧠āϏāĻāĻāĻ āĻŋāϤ āĻāϰāĻž āϏāĻžāϧāĻžāϰāĻŖ:
āĻāĻāĻŋ āĻāĻŽāϰāĻž āϝā§āĻāĻžāĻŦā§ āύā§āĻāĻŋāĻ HTML āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāĻā§ āύā§āϏā§āĻ āĻāϰāĻŋ āϤāĻžāϰ āϏāĻžāĻĨā§ āĻā§āĻŦ āĻŽāĻŋāϞ, āϤāĻŦā§ Vue āϤāĻžāϰ āύāĻŋāĻāϏā§āĻŦ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻŽāĻĄā§āϞ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰ⧠āϝāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āĻāĻžāϏā§āĻāĻŽ āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤ⧠āĻāĻŦāĻ āϝā§āĻā§āϤāĻŋ āĻāύāĻā§āϝāĻžāĻĒāϏā§āϞā§āĻ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤ Vue āύā§āĻāĻŋāĻ āĻāϝāĻŧā§āĻŦ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āϏāĻžāĻĨā§āĻ āϏā§āύā§āĻĻāϰāĻāĻžāĻŦā§ āĻā§āϞā§āĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ Vue āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāĻŦāĻ āύā§āĻāĻŋāĻ āĻāϝāĻŧā§āĻŦ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āϏāĻŽā§āĻĒāϰā§āĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻā§āϰāĻšā§ āĻšāύ, āĻāĻāĻžāύ⧠āĻāϰāĻ āĻĒāĻĄāĻŧā§āύāĨ¤
Defining a Component â
āĻāĻāĻāĻŋ āĻŦāĻŋāϞā§āĻĄ āϏā§āĻā§āĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻŽāϰāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ .vue
āĻāĻā§āϏāĻā§āύāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻŋ āĻĄā§āĻĄāĻŋāĻā§āĻā§āĻĄ āĻĢāĻžāĻāϞ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ Vue āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāϰāĻŋ - āϝāĻž Single-File Component (āϏāĻāĻā§āώā§āĻĒā§ SFC):
vue
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
<button @click="count++">You clicked me {{ count }} times.</button>
</template>
āĻāĻāĻāĻŋ āĻŦāĻŋāϞā§āĻĄ āϏā§āĻā§āĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻāĻāĻŋ Vue āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§ āĻāĻāĻāĻŋ āĻĒā§āϞā§āĻāύ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻ āĻŦāĻā§āĻā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āϝā§āĻāĻžāύ⧠Vue-āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻŦāĻŋāĻāϞā§āĻĒ āϰāϝāĻŧā§āĻā§:
js
import { ref } from 'vue'
export default {
setup() {
const count = ref(0)
return { count }
},
template: `
<button @click="count++">
You clicked me {{ count }} times.
</button>`
// Can also target an in-DOM template:
// template: '#my-template-element'
}
āĻā§āĻŽāĻĒā§āϞā§āĻāĻāĻŋ āĻāĻāĻžāύ⧠āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϏā§āĻā§āϰāĻŋāĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻāύāϞāĻžāĻāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§, āϝāĻž Vue āĻĢā§āϞāĻžāĻāϤ⧠āĻāĻŽā§āĻĒāĻžāĻāϞ āĻāϰāĻŦā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāĻāĻĄāĻŋ āύāĻŋāϰā§āĻŦāĻžāĻāĻāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝā§āĻāĻŋ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻĻāĻŋāĻā§ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰ⧠(āϏāĻžāϧāĻžāϰāĻŖāϤ āύā§āĻāĻŋāĻ <template>
āĻāĻŽā§āĻĒā§āύā§āύā§āĻ) - Vue āĻāϰ āϏāĻžāĻŽāĻā§āϰā§āĻā§ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻāϤā§āϏ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§ā§ˇ
āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻāĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻāĻāĻŋ .js
āĻĢāĻžāĻāϞā§āϰ āĻĄāĻŋāĻĢāϞā§āĻ exports āĻšāĻŋāϏāĻžāĻŦā§ export āĻāϰā§, āϤāĻŦā§ āĻāĻĒāύāĻŋ āĻāĻāĻ āĻĢāĻžāĻāϞ āĻĨā§āĻā§ āĻāĻāĻžāϧāĻŋāĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ exports āĻāϰāϤ⧠āύāĻžāĻŽ export āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
Using a Component â
TIP
āĻāĻŽāϰāĻž āĻāĻ āĻāĻžāĻāĻĄā§āϰ āĻŦāĻžāĻāĻŋ āĻ āĻāĻļā§āϰ āĻāύā§āϝ SFC āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ - āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāϞā§āĻĄ āϏā§āĻā§āĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻā§āύ āĻŦāĻž āύāĻž āĻāϰāĻā§āύ āϤāĻž āύāĻŋāϰā§āĻŦāĻŋāĻļā§āώ⧠āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āĻāĻžāϰāĻĒāĻžāĻļā§āϰ āϧāĻžāϰāĻŖāĻžāĻā§āϞāĻŋ āĻāĻāĻāĨ¤ Examples āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻāĻāϝāĻŧ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋāϤā§āĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĻā§āĻāĻžāϝāĻŧāĨ¤
āĻāĻāĻāĻŋ āĻāĻžāĻāϞā§āĻĄ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤā§, āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻŋāĻā§ āĻĒā§āϝāĻžāϰā§āύā§āĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āĻāĻŽā§āĻĒā§āϰā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āϧāϰ⧠āύāĻŋāĻā§āĻāĻŋ āĻāĻŽāϰāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻāύā§āĻāĻžāϰ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§ ButtonCounter.vue
āύāĻžāĻŽāĻ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞā§āϰ āĻāĻŋāϤāϰ⧠āϰā§āĻā§āĻāĻŋ, āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻāĻŋ āĻĢāĻžāĻāϞā§āϰ āĻĄāĻŋāĻĢāϞā§āĻ āĻāĻā§āϏāĻĒā§āϰā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻāύā§āĻŽā§āĻā§āϤ āĻšāĻŦā§:
vue
<script setup>
import ButtonCounter from './ButtonCounter.vue'
</script>
<template>
<h1>Here is a child component!</h1>
<ButtonCounter />
</template>
<script setup>
āĻāϰ āϏāĻžāĻĨā§, āĻāĻŽāĻĻāĻžāύāĻŋ āĻāϰāĻž āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āĻā§āĻŽāĻĒā§āϞā§āĻā§ āĻāĻĒāϞāĻŦā§āϧ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻāĻāĻŋ āĻāĻŽāĻĻāĻžāύāĻŋ āύāĻž āĻāϰā§āĻ āĻāĻāĻāĻŋ āĻĒā§āϰāĻĻāϤā§āϤ āĻ ā§āϝāĻžāĻĒā§āϰ āϏāĻŽāϏā§āϤ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻāύā§āϝ āĻāĻĒāϞāĻŦā§āϧ āĻāϰā§, āĻŦāĻŋāĻļā§āĻŦāĻŦā§āϝāĻžāĻĒā§ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āύāĻŋāĻŦāύā§āϧāύ āĻāϰāĻžāĻ āϏāĻŽā§āĻāĻŦāĨ¤ āĻā§āϞā§āĻŦāĻžāϞ āĻŦāύāĻžāĻŽ āϏā§āĻĨāĻžāύā§āϝāĻŧ āϰā§āĻāĻŋāϏā§āĻā§āϰā§āĻļāύā§āϰ āĻāĻžāϞā§-āĻŽāύā§āĻĻ āĻāϞā§āĻāύāĻž āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻĄā§āĻĄāĻŋāĻā§āĻā§āĻĄ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āϰā§āĻāĻŋāϏā§āĻā§āϰā§āĻļāύ āĻŦāĻŋāĻāĻžāĻā§āĨ¤
āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋ āĻāĻĒāύāĻŋ āϝāϤāĻŦāĻžāϰ āĻāĻžāύ āϤāϤāĻŦāĻžāϰ āĻĒā§āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§:
template
<h1>Here are many child components!</h1>
<ButtonCounter />
<ButtonCounter />
<ButtonCounter />
āϞāĻā§āώā§āϝ āĻāϰā§āύ āϝ⧠āĻŦā§āϤāĻžāĻŽāĻā§āϞāĻŋāϤ⧠āĻā§āϞāĻŋāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻĒā§āϰāϤāĻŋāĻāĻŋ āϤāĻžāϰ āύāĻŋāĻāϏā§āĻŦ, āĻĒā§āĻĨāĻ count
āĻŦāĻāĻžāϝāĻŧ āϰāĻžāĻā§āĨ¤ āĻāĻžāϰāĻŖ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞā§, āĻāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āĻāĻĻāĻžāĻšāϰāĻŖ āϤā§āϰāĻŋ āĻšāϝāĻŧāĨ¤
SFC-āϤā§, āύā§āĻāĻŋāĻ HTML āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻĨā§āĻā§ āĻāϞāĻžāĻĻāĻž āĻāϰāϤ⧠āĻāĻžāĻāϞā§āĻĄ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻāύā§āϝ PascalCase
āĻā§āϝāĻžāĻ āύāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āϝāĻĻāĻŋāĻ āύā§āĻāĻŋāĻ HTML āĻā§āϝāĻžāĻā§āϰ āύāĻžāĻŽāĻā§āϞāĻŋ āĻā§āϏ-āϏāĻāĻŦā§āĻĻāύāĻļā§āϞ, āϤāĻŦā§ Vue SFC āĻāĻāĻāĻŋ āϏāĻāĻāϞāĻŋāϤ āĻŦāĻŋāύā§āϝāĻžāϏ āϤāĻžāĻ āĻāĻŽāϰāĻž āĻāϤ⧠āĻā§āϏ-āϏāĻāĻŦā§āĻĻāύāĻļā§āϞ āĻā§āϝāĻžāĻ āύāĻžāĻŽāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āϏāĻā§āώāĻŽāĨ¤ āĻāĻŽāϰāĻž āĻā§āϝāĻžāĻ āĻŦāύā§āϧ āĻāϰāϤ⧠/>
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤā§āĻ āϏāĻā§āώāĻŽāĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āĻŽāĻĒā§āϞā§āĻāĻā§āϞāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻāĻāĻāĻŋ DOM-āĻ āϰāĻāύāĻž āĻāϰā§āύ (āϝā§āĻŽāύ āĻāĻāĻāĻŋ āύā§āĻāĻŋāĻ <template>
āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻŦāĻŋāώāϝāĻŧāĻ
āĻŦāĻā§āĻā§āĻ āĻšāĻŋāϏāĻžāĻŦā§), āĻā§āĻŽāĻĒā§āϞā§āĻāĻāĻŋ āĻŦā§āϰāĻžāĻāĻāĻžāϰā§āϰ āύā§āĻāĻŋāĻ HTML āĻĒāĻžāϰā§āϏāĻŋāĻ āĻāĻāϰāĻŖā§āϰ āĻ
āϧā§āύ āĻšāĻŦā§āĨ¤ āĻāĻ āϧāϰāύā§āϰ āĻā§āώā§āϤā§āϰā§, āĻāĻĒāύāĻžāĻā§ 'āĻāĻžāĻŦāĻžāĻŦ-āĻā§āϏ' āĻāĻŦāĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āϏā§āĻĒāώā§āĻ āĻā§āϞā§āĻāĻŋāĻ āĻā§āϝāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§:
template
<!-- if this template is written in the DOM -->
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
āĻāϰāĻ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāϰāĻŖā§āϰ āĻāύā§āϝ in-DOM template parsing caveats āĻĻā§āĻā§āύāĨ¤
Passing Props â
āϝāĻĻāĻŋ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻŦā§āϞāĻ āϤā§āϰāĻŋ āĻāϰāĻŋ, āϤāĻžāĻšāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŽā§āĻāĻŦāϤ āĻāĻāĻāĻŋ āĻŦā§āϞāĻ āĻĒā§āϏā§āĻā§āϰ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāϤā§āĻŦāĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāĻŦā§āĨ¤ āĻāĻŽāϰāĻž āĻāĻžāĻ āϝ⧠āϏāĻŽāϏā§āϤ āĻŦā§āϞāĻ āĻĒā§āϏā§āĻ āĻāĻāĻ āĻāĻŋāĻā§āϝā§āϝāĻŧāĻžāϞ āϞā§āĻāĻāĻ āĻļā§āϝāĻŧāĻžāϰ āĻāϰā§āĻ, āĻāĻŋāύā§āϤ⧠āĻāĻŋāύā§āύ āĻŦāĻŋāώāϝāĻŧāĻ āĻŦāĻā§āĻā§āĻ āϏāĻšāĨ¤ āĻāĻ āϧāϰāύā§āϰ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāĻĒāϝā§āĻā§ āĻšāĻŦā§ āύāĻž āϝāĻĻāĻŋ āύāĻž āĻāĻĒāύāĻŋ āĻāĻāĻŋāϤ⧠āĻĄā§āĻāĻž āĻĒāĻžāĻ āĻžāϤ⧠āĻĒāĻžāϰā§āύ, āϝā§āĻŽāύ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒā§āϏā§āĻā§āϰ āĻļāĻŋāϰā§āύāĻžāĻŽ āĻāĻŦāĻ āĻŦāĻŋāώāϝāĻŧāĻ āĻŦāĻā§āĻā§āĻ āĻāĻŽāϰāĻž āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰāϤ⧠āĻāĻžāĻāĨ¤ āϝ⧠āϝā§āĻāĻžāύ⧠āĻĒā§āϰāĻĒāϏ āĻāϏāĻž.
āĻĒā§āϰāĻĒāĻā§āϞāĻŋ āĻšāϞ āĻāĻžāϏā§āĻāĻŽ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻā§āϞāĻŋ āϝāĻž āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āύāĻŋāĻŦāύā§āϧāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āϞāĻ āĻĒā§āϏā§āĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āĻāĻāĻāĻŋ āĻļāĻŋāϰā§āύāĻžāĻŽ āĻĒāĻžāϏ āĻāϰāĻžāϰ āĻāύā§āϝ, defineProps
āĻŽā§āϝāĻžāĻā§āϰā§:
vue
<script setup>
defineProps(['title'])
</script>
<template>
<h4>{{ title }}</h4>
</template>
defineProps
āĻšāϞ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒāĻžāĻāϞ-āĻāĻžāĻāĻŽ āĻŽā§āϝāĻžāĻā§āϰ⧠āϝāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ <script setup>
-āĻāϰ āĻŽāϧā§āϝā§āĻ āĻāĻĒāϞāĻŦā§āϧ āĻāĻŦāĻ āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āĻāĻŽāĻĻāĻžāύāĻŋ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤ āĻā§āώāĻŋāϤ āĻĒā§āϰāĻĒāĻā§āϞāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āĻā§āĻŽāĻĒā§āϞā§āĻā§āϰ āĻāĻžāĻā§ āĻĒā§āϰāĻāĻžāĻļāĻŋāϤ āĻšāϝāĻŧāĨ¤ defineProps
āĻāĻāĻāĻŋ āĻ
āĻŦāĻā§āĻā§āĻāĻ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ āϝāĻžāϤ⧠āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āĻĒāĻžāϏ āĻāϰāĻž āϏāĻŽāϏā§āϤ āĻĒā§āϰāĻĒ āĻĨāĻžāĻā§, āϝāĻžāϤ⧠āĻāĻŽāϰāĻž āĻĒā§āϰāϝāĻŧā§āĻāύ⧠āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§ āϏā§āĻā§āϞāĻŋ āĻ
ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ:
js
const props = defineProps(['title'])
console.log(props.title)
āĻāϰ⧠āĻĻā§āĻā§āύ: Typing Component Props
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ <script setup>
āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠āĻĒā§āϰāĻĒāϏāĻā§ props
āĻŦāĻŋāĻāϞā§āĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻā§āώāĻŖāĻž āĻāϰāĻž āĻāĻāĻŋāϤ āĻāĻŦāĻ āĻĒā§āϰāĻĒāϏ āĻ
āĻŦāĻā§āĻā§āĻāĻāĻŋ āĻĒā§āϰāĻĨāĻŽ āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻšāĻŋāϏā§āĻŦā§ setup()
-āĻ āĻĒāĻžāϏ āĻāϰāĻž āĻšāĻŦā§:
js
export default {
props: ['title'],
setup(props) {
console.log(props.title)
}
}
āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āĻāĻĒāύāĻžāϰ āĻĒāĻāύā§āĻĻ āĻŽāϤ⧠āĻ āύā§āĻāĻā§āϞāĻŋ āĻĒā§āϰāĻĒ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻĄāĻŋāĻĢāϞā§āĻāϰā§āĻĒā§, āϝā§āĻā§āύ āĻŽāĻžāύ āϝā§āĻā§āύ āĻĒā§āϰāĻĒā§ āĻĒāĻžāϏ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻāĻŦāĻžāϰ āĻāĻāĻāĻŋ āĻĒā§āϰāĻĒ āύāĻŋāĻŦāύā§āϧāĻŋāϤ āĻšāϝāĻŧā§ āĻā§āϞā§, āĻāĻĒāύāĻŋ āĻāĻāĻŋāϤ⧠āĻāĻāĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻšāĻŋāϏāĻžāĻŦā§ āĻĄā§āĻāĻž āĻĒā§āϰā§āϰāĻŖ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϝā§āĻŽāύ:
template
<BlogPost title="My journey with Vue" />
<BlogPost title="Blogging with Vue" />
<BlogPost title="Why Vue is so fun" />
āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻ ā§āϝāĻžāĻĒā§, āϤāĻŦā§, āĻāĻĒāύāĻžāϰ āϏāĻŽā§āĻāĻŦāϤ āĻāĻĒāύāĻžāϰ āĻ āĻāĻŋāĻāĻžāĻŦāĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āĻĒā§āϏā§āĻā§āϰ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāϰ⧠āĻĨāĻžāĻāĻŦā§:
js
const posts = ref([
{ id: 1, title: 'My journey with Vue' },
{ id: 2, title: 'Blogging with Vue' },
{ id: 3, title: 'Why Vue is so fun' }
])
āϤāĻžāϰāĻĒāϰ v-for
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĒā§āϰāϤā§āϝā§āĻāĻāĻŋāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āϰā§āύā§āĻĄāĻžāϰ āĻāϰāϤ⧠āĻāĻžāύ:
template
<BlogPost
v-for="post in posts"
:key="post.id"
:title="post.title"
/>
āϞāĻā§āώā§āϝ āĻāϰā§āύ āĻāĻŋāĻāĻžāĻŦā§ v-bind
āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ (:title="post.title"
) āĻĄāĻžāϝāĻŧāύāĻžāĻŽāĻŋāĻ āĻĒā§āϰāĻĒ āĻŽāĻžāύ āĻĒāĻžāϏ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤ āĻāĻāĻŋ āĻŦāĻŋāĻļā§āώāĻāĻžāĻŦā§ āĻāĻĒāϝā§āĻā§ āϝāĻāύ āĻāĻĒāύāĻŋ āϏāĻ āĻŋāĻ āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤ⧠āĻāĻžāύā§āύ āύāĻž āϝ⧠āĻāĻĒāύāĻŋ āϏāĻŽāϝāĻŧā§āϰ āĻāĻā§ āϰā§āύā§āĻĄāĻžāϰ āĻāϰāϤ⧠āϝāĻžāĻā§āĻā§āύāĨ¤
āĻāĻĒāĻžāϤāϤ āĻĒā§āϰāĻĒāϏ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻĒāύāĻžāϰ āĻāϤāĻā§āĻā§āĻ āĻāĻžāύāĻž āĻĻāϰāĻāĻžāϰ, āĻāĻŋāύā§āϤ⧠āĻāĻāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āĻāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āĻĒāĻĄāĻŧāĻž āĻļā§āώ āĻāϰ⧠āĻāĻŦāĻ āĻāϰ āĻŦāĻŋāώāϝāĻŧāĻ āĻŦāĻā§āĻā§āĻāϤ⧠āϏā§āĻŦāĻžāĻā§āĻāύā§āĻĻā§āϝ āĻŦā§āϧ āĻāϰāϞā§, āĻāĻŽāϰāĻž āĻĒā§āϰāĻĒāϏ āĻāϰ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āĻĒāĻĄāĻŧāϤ⧠āĻĒāϰ⧠āĻĢāĻŋāϰ⧠āĻāϏāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻāĨ¤
Listening to Events â
āϝā§āĻšā§āϤ⧠āĻāĻŽāϰāĻž āĻāĻŽāĻžāĻĻā§āϰ <BlogPost>
āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻāĻŋ āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻ āĻāϰāĻŋ, āĻāĻŋāĻā§ āĻŦā§āĻļāĻŋāώā§āĻā§āϝā§āϰ āĻāύā§āϝ āĻ
āĻāĻŋāĻāĻžāĻŦāĻā§āϰ āϏāĻžāĻĨā§ āĻŦā§āϝāĻžāĻ āĻāĻĒ āϝā§āĻāĻžāϝā§āĻā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻŽāϰāĻž āĻĒā§āώā§āĻ āĻžāϰ āĻŦāĻžāĻāĻŋ āĻ
āĻāĻļāĻāĻŋāĻā§ āĻĄāĻŋāĻĢāϞā§āĻ āĻāĻāĻžāϰ⧠āϰā§āĻā§ āĻŦā§āϞāĻ āĻĒā§āϏā§āĻā§āϰ āĻĒāĻžāĻ ā§āϝāĻā§ āĻŦāĻĄāĻŧ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻ
ā§āϝāĻžāĻā§āϏā§āϏāĻŋāĻŦāĻŋāϞāĻŋāĻāĻŋ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
āĻ
āĻāĻŋāĻāĻžāĻŦāĻāĻĻā§āϰ āĻŽāϧā§āϝā§, āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻĒā§āϏā§āĻāĻĢāύā§āĻ āϏāĻžāĻāĻ
āϝā§āĻ āĻāϰ⧠āĻāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋāĻā§ āϏāĻŽāϰā§āĻĨāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ ref:
js
const posts = ref([
/* ... */
])
const postFontSize = ref(1)
āϝāĻž āϏāĻŽāϏā§āϤ āĻŦā§āϞāĻ āĻĒā§āϏā§āĻā§āϰ āĻĢāύā§āĻ āϏāĻžāĻāĻ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāϤ⧠āĻā§āĻŽāĻĒā§āϞā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§:
template
<div :style="{ fontSize: postFontSize + 'em' }">
<BlogPost
v-for="post in posts"
:key="post.id"
:title="post.title"
/>
</div>
āĻāĻāύ āĻāϏā§āύ <BlogPost>
āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻā§āĻŽāĻĒā§āϞā§āĻā§ āĻāĻāĻāĻŋ āĻŦā§āϤāĻžāĻŽ āϝā§āĻ āĻāϰāĻŋ:
vue
<!-- omitting <script> -->
<template>
<div class="blog-post">
<h4>{{ title }}</h4>
<button>Enlarge text</button>
</div>
</template>
āĻŦā§āϤāĻžāĻŽāĻāĻŋ āĻāĻāύāĻ āĻāĻŋāĻā§ āĻāϰ⧠āύāĻž - āĻāĻŽāϰāĻž āĻ
āĻāĻŋāĻāĻžāĻŦāĻāĻĻā§āϰ āϏāĻžāĻĨā§ āϝā§āĻāĻžāϝā§āĻ āĻāϰāϤ⧠āĻŦā§āϤāĻžāĻŽāĻāĻŋ āĻā§āϞāĻŋāĻ āĻāϰāϤ⧠āĻāĻžāĻ āϝ⧠āĻāĻāĻŋ āϏāĻŽāϏā§āϤ āĻĒā§āϏā§āĻā§āϰ āĻĒāĻžāĻ ā§āϝāĻā§ āĻŦāĻĄāĻŧ āĻāϰāĻŦā§ā§ˇ āĻāĻ āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋ āĻāĻāĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻāĻā§āύā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āĻ
āĻāĻŋāĻāĻžāĻŦāĻ āĻāĻžāĻāϞā§āĻĄāϰ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāύā§āϏāĻā§āϝāĻžāύā§āϏ⧠v-on
āĻŦāĻž @
āĻĻāĻŋāϝāĻŧā§ āϝā§āĻā§āύ⧠āĻāĻā§āύā§āĻ āĻļā§āύāĻžāϰ āĻāύā§āϝ āĻŦā§āĻā§ āύāĻŋāϤ⧠āĻĒāĻžāϰā§āύ, āĻ āĻŋāĻ āϝā§āĻŽāύāĻāĻŋ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āύā§āĻāĻŋāĻ DOM āĻāĻā§āύā§āĻā§ āĻāϰāĻŦ:
template
<BlogPost
...
@enlarge-text="postFontSize += 0.1"
/>
āϤāĻžāϰāĻĒāϰ āĻāĻžāĻāϞā§āĻĄ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻŦāĻŋāϞā§āĻ-āĻāύ $emit
āĻĒāĻĻā§āϧāϤāĻŋ āĻāϞ āĻāϰ⧠āĻāĻā§āύā§āĻā§āϰ āύāĻžāĻŽ āĻĒāĻžāϏ āĻāϰ⧠āύāĻŋāĻā§āĻ āĻāĻāĻāĻŋ āĻāĻā§āύā§āĻ āύāĻŋāϰā§āĻāϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§:
vue
<!-- omitting <script> -->
<template>
<div class="blog-post">
<h4>{{ title }}</h4>
<button @click="$emit('enlarge-text')">Enlarge text</button>
</div>
</template>
@enlarge-text="postFontSize += 0.1"
āĻļā§āϰā§āϤāĻžāĻā§ āϧāύā§āϝāĻŦāĻžāĻĻ, āĻ
āĻāĻŋāĻāĻžāĻŦāĻ āĻāĻā§āύā§āĻāĻāĻŋ āĻĒāĻžāĻŦā§āύ āĻāĻŦāĻ postFontSize
-āĻāϰ āĻŽāĻžāύ āĻāĻĒāĻĄā§āĻ āĻāϰāĻŦā§āύāĨ¤
āĻāĻŽāϰāĻž āĻāĻā§āĻāĻŋāĻāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āύāĻŋāϰā§āĻāϤ āĻāĻā§āύā§āĻ āĻā§āώāĻŖāĻž āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ defineEmits
āĻŽā§āϝāĻžāĻā§āϰā§:
vue
<script setup>
defineProps(['title'])
defineEmits(['enlarge-text'])
</script>
āĻāĻāĻŋ āϏāĻŽāϏā§āϤ āĻāĻā§āύā§āĻāĻā§āϞāĻŋāĻā§ āύāĻĨāĻŋāĻā§āĻā§āϤ āĻāϰ⧠āϝāĻž āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āύāĻŋāϰā§āĻāϤ āĻāϰ⧠āĻāĻŦāĻ āĻāĻā§āĻāĻŋāĻāĻāĻžāĻŦā§ āϤāĻžāĻĻā§āϰ āϝāĻžāĻāĻžāĻ āĻāϰā§āĨ¤ āĻāĻāĻŋ Vue-āĻā§ āĻāĻžāĻāϞā§āĻĄ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻŽā§āϞ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āύā§āĻāĻŋāĻ āĻļā§āϰā§āϤāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āĻāĻĄāĻŧāĻžāϤā§āĻ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧāĨ¤
defineProps
āĻāϰ āĻŽāϤā§, defineEmits
āĻļā§āϧā§āĻŽāĻžāϤā§āϰ <script setup>
-āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝ āĻāĻŦāĻ āĻāĻŽāĻĻāĻžāύāĻŋ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ emit
āĻĢāĻžāĻāĻļāύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠āϝāĻž $emit
āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏāĻŽāϤā§āϞā§āϝāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ <script setup>
āĻŦāĻŋāĻāĻžāĻā§ āĻāĻā§āύā§āĻ āύāĻŋāϰā§āĻāϤ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§, āϝā§āĻāĻžāύ⧠$emit
āϏāϰāĻžāϏāϰāĻŋ āĻ
ā§āϝāĻžāĻā§āϏā§āϏāϝā§āĻā§āϝ āύāϝāĻŧ:
vue
<script setup>
const emit = defineEmits(['enlarge-text'])
emit('enlarge-text')
</script>
See also: Typing Component Emits
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ <script setup>
āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻŋ emits
āĻŦāĻŋāĻāϞā§āĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āύāĻŋāϰā§āĻāϤ āĻāĻā§āύā§āĻ āĻā§āώāĻŖāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ āϏā§āĻāĻāĻĒ āĻĒā§āϰāϏāĻā§āĻā§āϰ āĻāĻāĻāĻŋ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻšāĻŋāϏāĻžāĻŦā§ emits
āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻ
ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ (āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ setup()
āĻ āĻĒāĻžāϏ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§):
js
export default {
emits: ['enlarge-text'],
setup(props, ctx) {
ctx.emit('enlarge-text')
}
}
āĻāĻžāϏā§āĻāĻŽ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāĻā§āύā§āĻāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻĒāύāĻžāϰ āĻāĻĒāĻžāϤāϤ āĻāϤāĻā§āĻā§āĻ āĻāĻžāύāĻž āĻĻāϰāĻāĻžāϰ, āĻāĻŋāύā§āϤ⧠āĻāĻāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āĻāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āĻĒāĻĄāĻŧāĻž āĻļā§āώ āĻāϰ⧠āĻāĻŦāĻ āĻāϰ āϏāĻžāĻŽāĻā§āϰā§āϰ āϏāĻžāĻĨā§ āϏā§āĻŦāĻžāĻā§āĻāύā§āĻĻā§āϝ āĻŦā§āϧ āĻāϰāϞā§, āĻāĻŽāϰāĻž āϏāĻŽā§āĻĒā§āϰā§āĻŖ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻžāĻāĻŋ Custom Events āĻĒāĻĄāĻŧāĻžāϰ āĻāύā§āϝ āĻĒāϰ⧠āĻĢāĻŋāϰ⧠āĻāϏāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻāĨ¤
Content Distribution with Slots â
āĻ āĻŋāĻ HTML āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āĻŽāϤā§, āĻāĻāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāĻ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§ āϏāĻžāĻŽāĻā§āϰ⧠āĻĒā§āϰā§āϰāĻŖ āĻāϰāϤ⧠āϏāĻā§āώāĻŽ āĻšāĻāϝāĻŧāĻž āĻĻāϰāĻāĻžāϰā§, āϝā§āĻŽāύ:
template
<AlertBox>
Something bad happened.
</AlertBox>
āϝāĻž āĻāĻŋāĻā§ āϰā§āύā§āĻĄāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§:
āĻāĻāĻŋ āĻĄā§āĻŽā§ āĻāĻĻā§āĻĻā§āĻļā§āϝā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϤā§āϰā§āĻāĻŋ
āĻāĻžāϰāĻžāĻĒ āĻāĻŋāĻā§ āĻāĻā§āĻā§.
āĻāĻāĻŋ Vue āĻāϰ āĻāĻžāϏā§āĻāĻŽ <slot>
āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻ
āϰā§āĻāύ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§:
vue
<template>
<div class="alert-box">
<strong>This is an Error for Demo Purposes</strong>
<slot />
</div>
</template>
<style scoped>
.alert-box {
/* ... */
}
</style>
āĻāĻĒāύāĻŋ āĻāĻĒāϰ⧠āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ, āĻāĻŽāϰāĻž <slot>
āĻāĻāĻāĻŋ āϏā§āĻĨāĻžāύāϧāĻžāϰāĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻŦāĻŋāώāϝāĻŧāĻ
āĻŦāĻā§āĻā§āĻāĻāĻŋ āϝā§āϤ⧠āĻāĻžāĻ - āĻāĻŦāĻ āĻāĻāĻžāĻāĨ¤ āϏāĻŽā§āĻĒāύā§āύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§!
āĻāĻĒāĻžāϤāϤ āϏā§āϞāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻĒāύāĻžāϰ āĻāϤāĻā§āĻā§āĻ āĻāĻžāύāĻž āĻĻāϰāĻāĻžāϰ, āĻāĻŋāύā§āϤ⧠āĻāĻāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āĻāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āĻĒāĻĄāĻŧāĻž āĻļā§āώ āĻāϰ⧠āĻāĻŦāĻ āĻāϰ āĻŦāĻŋāώāϝāĻŧāĻ āĻŦāĻā§āĻā§āĻāϤ⧠āϏā§āĻŦāĻžāĻā§āĻāύā§āĻĻā§āϝ āĻŦā§āϧ āĻāϰāϞā§, āĻāĻŽāϰāĻž Slots āĻāϰ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āĻĒāĻĄāĻŧāϤ⧠āĻĒāϰ⧠āĻĢāĻŋāϰ⧠āĻāϏāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻāĨ¤
Dynamic Components â
āĻāĻāύāĻ āĻāĻāύāĻ, āĻā§āϝāĻžāĻŦāϝā§āĻā§āϤ āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻŽāϤ⧠āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāϤāĻŋāĻļā§āϞāĻāĻžāĻŦā§ āϏā§āϝā§āĻāĻ āĻāϰāĻž āĻĻāϰāĻāĻžāϰā§:
āĻāĻĒāϰā§āϰāĻāĻŋ Vue āĻāϰ <component>
āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻŋāĻļā§āώ is
āĻŦā§āĻļāĻŋāώā§āĻā§āϝā§āϰ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽā§āĻāĻŦ āĻšāϝāĻŧā§āĻā§:
template
<!-- Component changes when currentTab changes -->
<component :is="tabs[currentTab]"></component>
āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§, :is
-āĻ āĻĒāĻžāϏ āĻāϰāĻž āĻŽāĻžāύāĻāĻŋāϤ⧠āϝ⧠āĻā§āύ⧠āĻāĻāĻāĻŋ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§:
- āĻāĻāĻāĻŋ āύāĻŋāĻŦāύā§āϧāĻŋāϤ component āύāĻžāĻŽ āϏā§āĻā§āϰāĻŋāĻ, āĻŦāĻž
- imported āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻ āĻŦāĻā§āĻā§āĻ
āĻāĻĒāύāĻŋ āύāĻŋāϝāĻŧāĻŽāĻŋāϤ HTML āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠is
āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
<component :is="...">
āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻžāϧāĻŋāĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻŽāϧā§āϝ⧠āϏā§āϝā§āĻāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāύāĻŽāĻžāĻāύā§āĻ āĻāϰāĻž āĻšāĻŦā§ āϝāĻāύ āĻāĻāĻŋ āĻĨā§āĻā§ āϏā§āĻāĻ āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻāĻŽāϰāĻž āĻŦāĻŋāϞā§āĻ-āĻāύ <KeepAlive>
āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻĻāĻŋāϝāĻŧā§ āύāĻŋāώā§āĻā§āϰāĻŋāϝāĻŧ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāĻā§ "āĻā§āĻŦāĻŋāϤ" āĻĨāĻžāĻāϤ⧠āĻŦāĻžāϧā§āϝ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
in-DOM Template Parsing Caveats â
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāϰāĻžāϏāϰāĻŋ DOM-āĻ āĻāĻĒāύāĻžāϰ Vue āĻā§āĻŽāĻĒā§āϞā§āĻ āϞāĻŋāĻāĻā§āύ, Vue-āĻā§ DOM āĻĨā§āĻā§ āĻā§āĻŽāĻĒā§āϞā§āĻ āϏā§āĻā§āϰāĻŋāĻ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻŦā§āϰāĻžāĻāĻāĻžāϰā§āϰ āύā§āĻāĻŋāĻ HTML āĻĒāĻžāϰā§āϏāĻŋāĻ āĻāĻāϰāĻŖā§āϰ āĻāĻžāϰāĻŖā§ āĻāĻŋāĻā§ āϏāϤāϰā§āĻāϤāĻžāϰ āĻĻāĻŋāĻā§ āύāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤
TIP
āĻāĻāĻŋ āϞāĻā§āώ āĻāϰāĻž āĻāĻāĻŋāϤ āϝ⧠āύā§āĻā§ āĻāϞā§āĻāύāĻž āĻāϰāĻž āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāĻā§āϞāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϤāĻāύāĻ āĻĒā§āϰāϝā§āĻā§āϝ āĻšāĻŦā§ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āϏāϰāĻžāϏāϰāĻŋ DOM-āĻ āĻāĻĒāύāĻžāϰ āĻā§āĻŽāĻĒā§āϞā§āĻāĻā§āϞāĻŋ āϞāĻŋāĻāĻā§āύ⧎ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāϤā§āϏ āĻĨā§āĻā§ āϏā§āĻā§āϰāĻŋāĻ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āϤāĻŦā§ āϏā§āĻā§āϞāĻŋ āĻĒā§āϰāϝā§āĻā§āϝ āĻšāĻŦā§ āύāĻž:
- āĻāĻāĻ āĻĢāĻžāĻāϞ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ
- āĻāύāϞāĻžāĻāύāĻĄ āĻā§āĻŽāĻĒā§āϞā§āĻ āϏā§āĻā§āϰāĻŋāĻ (e.g.
template: '...'
) <script type="text/x-template">
Case Insensitivity â
HTML āĻā§āϝāĻžāĻ āĻāĻŦāĻ āĻ
ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āϰ āύāĻžāĻŽāĻā§āϞāĻŋ āĻ
āĻā§āώāϰ-āϏāĻāĻŦā§āĻĻāύāĻļā§āϞ, āϤāĻžāĻ āĻŦā§āϰāĻžāĻāĻāĻžāϰāĻā§āϞāĻŋ āĻŦāĻĄāĻŧ āĻšāĻžāϤā§āϰ āĻ
āĻā§āώāϰāĻā§āϞāĻŋāĻā§ āĻā§āĻ āĻšāĻžāϤā§āϰ āĻ
āĻā§āώāϰ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰāĻŦā§āĨ¤ āĻāϰ āĻŽāĻžāύ⧠āĻšāϞ āĻāĻĒāύāĻŋ āϝāĻāύ āĻāύ-āĻĄā§āĻŽ āĻā§āĻŽāĻĒā§āϞā§āĻāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻā§āύ, āϤāĻāύ PascalCase āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻā§āϝāĻžāĻŽā§āϞāĻā§āϏāĻĄ āĻĒā§āϰāĻĒ āύāĻžāĻŽ āĻŦāĻž v-on
āĻāĻā§āύā§āĻā§āϰ āύāĻžāĻŽāĻā§āϞāĻŋāĻā§ āϤāĻžāĻĻā§āϰ āĻāĻžāĻŦāĻžāĻŦ-āĻā§āϏāĻĄ (āĻšāĻžāĻāĻĢā§āύ-āĻĄāĻŋāϞāĻŋāĻŽāĻŋāĻā§āĻĄ) āϏāĻŽāϤā§āϞā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§:
js
// camelCase in JavaScript
const BlogPost = {
props: ['postTitle'],
emits: ['updatePost'],
template: `
<h3>{{ postTitle }}</h3>
`
}
template
<!-- kebab-case in HTML -->
<blog-post post-title="hello!" @update-post="onUpdatePost"></blog-post>
Self Closing Tags â
āĻāĻŽāϰāĻž āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āĻā§āĻĄ āύāĻŽā§āύāĻžāĻā§āϞāĻŋāϤ⧠āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āϏā§āĻŦ-āĻā§āϞā§āĻāĻŋāĻ āĻā§āϝāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻāĻŋ:
template
<MyComponent />
āĻāϰ āĻāĻžāϰāĻŖ āĻšāϞ Vue-āĻāϰ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻĒāĻžāϰā§āϏāĻžāϰ />
āĻā§ āϝ⧠āĻā§āύ⧠āĻā§āϝāĻžāĻ āĻļā§āώ āĻāϰāĻžāϰ āĻāĻā§āĻāĻŋāϤ āĻšāĻŋāϏā§āĻŦā§ āϏāĻŽā§āĻŽāĻžāύ āĻāϰā§, āϤāĻžāϰ āϧāϰāύ āύāĻŋāϰā§āĻŦāĻŋāĻļā§āώā§āĨ¤
āĻāύ-āĻĄā§āĻŽ āĻā§āĻŽāĻĒā§āϞā§āĻāĻā§āϞāĻŋāϤā§, āϤāĻŦā§, āĻāĻŽāĻžāĻĻā§āϰ āĻ āĻŦāĻļā§āϝāĻ āϏāϰā§āĻŦāĻĻāĻž āϏā§āĻĒāώā§āĻ āĻā§āϞā§āĻāĻŋāĻ āĻā§āϝāĻžāĻ āĻ āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰāϤ⧠āĻšāĻŦā§:
template
<my-component></my-component>
āĻāϰ āĻāĻžāϰāĻŖ āĻšāϞ HTML āϏā§āĻĒā§āĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻŋāĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻā§āϞā§āĻāĻŋāĻ āĻā§āϝāĻžāĻāĻā§āϞāĻŋāĻā§ āĻŦāĻžāĻĻ āĻĻā§āĻāϝāĻŧāĻžāϰ āĻ
āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ, āϏāĻŦāĻā§āϝāĻŧā§ āϏāĻžāϧāĻžāϰāĻŖ āĻšāϞ <input>
āĻāĻŦāĻ <img>
āĨ¤ āĻ
āύā§āϝ āϏāĻŦ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻāύā§āϝ, āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻā§āϞā§āĻāĻŋāĻ āĻā§āϝāĻžāĻāĻāĻŋ āĻŦāĻžāĻĻ āĻĻā§āύ, āϤāĻžāĻšāϞ⧠āύā§āĻāĻŋāĻ HTML āĻĒāĻžāϰā§āϏāĻžāϰ āĻŽāύ⧠āĻāϰāĻŦā§ āĻāĻĒāύāĻŋ āĻāĻāύāĻ āĻāĻĒā§āύāĻŋāĻ āĻā§āϝāĻžāĻāĻāĻŋ āĻŦāύā§āϧ āĻāϰā§āύāύāĻŋāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏā§āύāĻŋāĻĒā§āĻ:
template
<my-component /> <!-- we intend to close the tag here... -->
<span>hello</span>
will be parsed as:
template
<my-component>
<span>hello</span>
</my-component> <!-- but the browser will close it here. -->
Element Placement Restrictions â
āĻāĻŋāĻā§ HTML āĻāĻŽā§āĻĒā§āύā§āύā§āĻ, āϝā§āĻŽāύ <ul>
, <ol>
, <table>
āĻāĻŦāĻ <select>
-āĻāϰ āĻŽāϧā§āϝ⧠āĻā§ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻāĻĒāϏā§āĻĨāĻŋāϤ āĻšāϤ⧠āĻĒāĻžāϰ⧠āϤāĻžāϰ āĻāĻĒāϰ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āϰāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻŋāĻā§ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āϝā§āĻŽāύ <li>
, <tr>
, āĻāĻŦāĻ <option>
āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻŋāĻā§ āĻ
āύā§āϝāĻžāύā§āϝ āĻāĻŽā§āĻĒā§āύā§āύā§āĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻĒāϏā§āĻĨāĻŋāϤ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻ āϧāϰāύā§āϰ āĻŦāĻŋāϧāĻŋāύāĻŋāώā§āϧ āĻāĻā§ āĻāĻŽāύ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻāĻŋ āϏāĻŽāϏā§āϝāĻžāϰ āĻĻāĻŋāĻā§ āĻĒāϰāĻŋāĻāĻžāϞāĻŋāϤ āĻāϰāĻŦā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ āϏā§āĻŦāϰā§āĻĒ:
template
<table>
<blog-post-row></blog-post-row>
</table>
āĻāĻžāϏā§āĻāĻŽ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ <blog-post-row>
āĻ
āĻŦā§āϧ āĻŦāĻŋāώāϝāĻŧāĻ
āĻŦāĻā§āĻā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻāϤā§āϤā§āϞāύ āĻāϰāĻž āĻšāĻŦā§, āϝāĻžāϰ āĻĢāϞ⧠āĻā§āĻĄāĻŧāĻžāύā§āϤ āϰā§āύā§āĻĄāĻžāϰ āĻāϰāĻž āĻāĻāĻāĻĒā§āĻā§ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻž āĻĻāĻŋāĻŦā§āĨ¤ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦāĻŋāĻļā§āώ is
āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ:
template
<table>
<tr is="vue:blog-post-row"></tr>
</table>
TIP
āϝāĻāύ āύā§āĻāĻŋāĻ āĻāĻāĻāĻāĻŋāĻāĻŽāĻāϞ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ, āϤāĻāύ āĻāĻāĻāĻŋ Vue āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰāĻžāϰ āĻāύā§āϝ is
āĻāϰ āĻŽāĻžāύ āĻ
āĻŦāĻļā§āϝāĻ vue:
āĻāϰ āϏāĻžāĻĨā§ āĻĒā§āϰāĻŋāĻĢāĻŋāĻā§āϏ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻāĻžāϏā§āĻāĻŽāĻžāĻāĻāĻĄ āĻŦāĻŋāϞā§āĻ-āĻāύ elements āύāĻŋāϝāĻŧā§ āĻŦāĻŋāĻā§āϰāĻžāύā§āϤāĻŋ āĻāĻĄāĻŧāĻžāϤ⧠āĻāĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤
āĻāĻāύāĻāĻžāϰ āĻāύā§āϝ āĻāύ-āĻĄā§āĻŽ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻĒāĻžāϰā§āϏāĻŋāĻ āϏāϤāϰā§āĻāϤāĻž āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻĒāύāĻžāϰ āĻāϤāĻā§āĻā§āĻ āĻāĻžāύāĻž āĻĻāϰāĻāĻžāϰ - āĻāĻŦāĻ āĻāϏāϞā§, Vue āĻāϰ Essentials āĻāϰ āĻļā§āώāĨ¤ āĻ āĻāĻŋāύāύā§āĻĻāύ! āĻļā§āĻāĻžāϰ āĻāύā§āϝ āĻāĻāύāĻ āĻāϰāĻ āĻ āύā§āĻ āĻāĻŋāĻā§ āĻāĻā§, āĻāĻŋāύā§āϤ⧠āĻĒā§āϰāĻĨāĻŽā§, āĻāĻŽāϰāĻž Vue āĻāϰ āϏāĻžāĻĨā§ āĻ āύā§āĻļā§āϞāύ āĻāϰāĻž āĻāύā§āϝ āĻŦāĻŋāϰāϤāĻŋ āύā§āĻāϝāĻŧāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻ - āĻŽāĻāĻžāĻĻāĻžāϰ āĻāĻŋāĻā§ āϤā§āϰāĻŋ āĻāϰā§āύ, āĻ āĻĨāĻŦāĻž āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āύāĻž āĻāϰ⧠āĻĨāĻžāĻā§āύ āϤāĻŦā§ āĻāĻŋāĻā§ Examples āĻĻā§āĻā§āύāĨ¤
āĻāĻāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āϝ⧠āĻā§āĻāĻžāύāĻāĻŋ āĻšāĻāĻŽ āĻāϰā§āĻā§āύ āϤāĻžāϤ⧠āϏā§āĻŦāĻžāĻā§āĻāύā§āĻĻā§āϝ āĻŦā§āϧ āĻāϰāϞā§, āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻā§āϰāĻāĻžāĻŦā§ āĻāϰāĻ āĻāĻžāύāϤ⧠āĻāĻžāĻāĻĄā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻŋāϝāĻŧā§ āϝāĻžāύāĨ¤
GitHub-āĻ āĻāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰā§āύ