Vueμμ Single File Component(SFC,
*.vue
)λ Vue μ»΄ν¬λνΈμ ν νλ¦Ώ(template), λ‘μ§(script), μ€νμΌ(style)μ νλμ νμΌλ‘ μΊ‘μννλ νΉμνμΌ νμμ΄λ€. νμ₯μλ*.vue
μ΄λ€.
<template>
*.vue
νμΌμ ν λ²μ μ΅λ νλμ top-level <template>
λΈλ‘μ ν¬ν¨ν μ μλ€.@vue/compiler-dom
μΌλ‘ μ λ¬λκ³ , JavaScript λ λ κΈ°λ₯μΌλ‘ μ¬μ μ»΄νμΌλκ³ , render
μ΅μ
μΌλ‘ λ΄λ³΄λ΄μ΄ μ»΄ν¬λνΈμ 첨λΆλλ€.<script>
*.vue
νμΌμ ν λ²μ μ΅λ νλμ <script>
λΈλ‘μ ν¬ν¨ν μ μλ€.(< script setup >μ μΈ)defaulte export
λ μΌλ° κ°μ²΄ λλ defineComponent
μ λ°ν κ°μΌλ‘ Vue μ»΄ν¬λνΈ μ΅μ
κ°μ²΄μ¬μΌ νλ€.<script setup>
*.vue
νμΌμ ν λ²μ μ΅λ νλμ <script setup>
λΈλ‘μ ν¬ν¨ν μ μλ€.<script setup>
μ μ¬μ μ μ²λ¦¬λμ΄ μ»΄ν¬λνΈμ setup()
ν¨μλ‘ μ¬μ©λλ€. μ¦ μ»΄ν¬λνΈμ κ° μΈμ€ν΄μ€μ λν΄ μ€νλλ€. <script setup>
μ μ΅μμ λ°μΈλ©μ ν
νλ¦Ώμ μλμΌλ‘ λ
ΈμΆλλ€.<style>
*.vue
νμΌμλ μ¬λ¬ <style>
νκ·Έκ° ν¬ν¨λ μ μλ€.<style>
νκ·Έλ νμ¬ μ»΄ν¬λνΈμ μ€νμΌμ μΊ‘μννλλ° λμμ΄ λλλ‘ scoped
λλ module
μμ±μ κ°μ§ μ μλ€. μΊ‘μν λͺ¨λκ° λ€λ₯Έ μ¬λ¬ <style>
νκ·Έλ₯Ό λμΌν κ΅¬μ± μμμμ νΌν©ν μ μλ€.νλ‘μ νΈλ³ μꡬμ¬νμ λ°λΌ
*.vue
νμΌμ μ¬μ©μ μ μ λΈλ‘μ μΆκ°ν μ μλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ μ¬μ©μ μ μ λΈλ‘ μκ° μλ€.
<page-query>
<gql>
<i18n>
<script>
μlang
μμ±μ μ¬μ©νμ¬ μ μ²λ¦¬κΈ° μΈμ΄λ₯Ό μ μΈν μ μλ€. μΌλ°μ μΈ κ²½μ°μλ TypeScriptλ₯Ό μ¬μ©νλ κ²μ΄λ€.
<script lang="ts">
//use TypeScript
</script>
lang
μμ±μ λͺ¨λ λΈλ‘μ μ μ©ν μ μλ€. μλ₯Ό λ€μ΄ SASSμ Pugλ₯Ό <style>
κ³Ό <template>
μ μ μ©ν μ μλ€.
<template lang="pug">
p {{ msg }}
</template>
<style lang="scss">
$primary-color:#333;
body{
color: $primary-color;
}
</style>
*.vue
μ»΄ν¬λνΈλ₯Ό μ¬λ¬ νμΌλ‘ λΆν νλ €λ κ²½μ°src
μμ±μ μ¬μ©νμ¬language block
μ λν μΈλΆ νμΌμ κ°μ Έμ¬ μ μλ€.
<template src="./templatye.html"></template>
<style src="./style.css"></style>
<script src="./script.js"></script>
src
λ‘ κ°μ Έμ€λ κ²μ webpack λͺ¨λ μμ²κ³Ό λμΌν κ²½λ‘ νμΈ κ·μΉμ λ°λ¦
λλ€. μ¦, λ€μμ μλ―Ένλ€. μλ κ²½λ‘λ ./ λ‘ μμν΄μΌ νλ€.
npm μ’
μμ±μμ 리μμ€λ₯Ό κ°μ Έμ¬ μ μμ΅λλ€.
<!-- import a file from the installed "todomvc-app-css" npm package -->
<style src="./style.css"></style>
src κ°μ Έμ€κΈ°λ μ¬μ©μ μ μ λΈλ‘μμλ μλν©λλ€.
<unit-test src="./unit-test.js">
</unit-test>
Scoped CSS
<style>
νκ·Έμscoped
μμ±μ΄ μλ κ²½μ° ν΄λΉ CSSλ νμ¬ μ»΄ν¬λνΈμ μμμλ§ μ μ©λλ€.
<template>
<p class="greeting">greeting</p>
</template>
<style scoped>
.greeting{ color:red; font-weight:bold;}
</style>
μ리λ PostCSS μ¬μ©νμ¬ μλμ κ°μ΄ λ³ν λλ€.
<template>
<p class="greeting" data-v-7ba5bd90>greeting</p>
</template>
<style scoped>
.greeting[data-v-7ba5bd90]{ color:red; font-weight:bold;}
</style>
CSS λͺ¨λ
<style module>
μ CSS λͺ¨λλ‘ μ»΄νμΌλκ³ , CSS ν΄λμ€$style
κ°μ²΄μ μμ±μΌλ‘ λ ΈμΆνλ€.
<template>
<p :class="$style.red">This should be red</p>
</template>
<style module>
.red{ color: red;}
</style>
κ²°κ³Ό ν΄λμ€λ μΆ©λμ νΌνκΈ° μν΄ ν΄μλμ΄ CSS λ²μλ₯Ό νμ¬ μ»΄ν¬λνΈλ‘λ§ μ§μ νλ κ²κ³Ό λμΌν ν¨κ³Όλ₯Ό μ»μ΅λλ€. μ μ μμΈ λ° κ΅¬μ±κ³Ό κ°μ μμΈν λ΄μ©μ CSS λͺ¨λ μ¬μμ μ°Έμ‘°
Custom Inject Name
λͺ¨λ μμ±μ κ°μ μ 곡νμ¬ μ£Όμ
λ ν΄λμ€ κ°μ²΄μ μμ± ν€λ₯Ό λ³κ²½ν μ μλ€.
<template>
<p :class="classes.red">red</p>
</template>
<style module="classes">
.red{ color: red;}
</style>
v-bind()
in CSS
SFC<style>
νκ·Έλv-bind
CSS κΈ°λ₯μ μ¬μ©νμ¬ CSS κ°μ λμ κ΅¬μ± μμ μνμ μ°κ²°νλ κ²μ μ§μνλ€.
<template>
<div class="text">hello</div>
</template>
<script>
export default {
data(){
return{
color: 'red'
}
}
}
</script>
<style>
.text{ color: v-bind(color);}
</style>