แนะนำ Vue Component และ Concept
สามารถดู video ของหัวข้อนี้ก่อนได้ ดู video
Document ต้นฉบับ:
- https://vuejs.org/guide/essentials/application.html
- https://vuejs.org/guide/essentials/template-syntax.html
เราเริ่มต้นจาก Component กันก่อน
Component คือ 1 ใน core concept ของ vue. Component คือการแบ่งส่วนเว็บออกเป็นชิ้นเล็กๆทีรวม html, css และ javascript เอาไว้ในก้อนเดียวกัน นั่นคือ
- template (html)
- script (javascript logic)
- style (css styling)
ซึ่ง Vue instance นั่นเองก็จะมีของที่ขนมาตามไม่ว่าจะเป็น data, method, computed properties และ life cycle ของตัวเอง
แล้วจุดเริ่มต้นของ Vue Application คือจุดไหน = Root component
Root component คือ component ที่อยู่ส่วนบนสุดของ Application ยกตัวอย่างกั บ เคสนี้คือ App.vue คือส่วนที่เป็น Root component ที่เป็นจุดเริ่มต้นของ Application
├─ index.html
├─ package.json
├─ public
├─ src
│ ├─ App.vue <--
│ ├─ assets
│ ├─ components
│ ├─ main.js
│ ├─ style.css
├─ vite.config.js
ซึ่งถ้าเราดู main.js นั้น (ซึ่งเป็นจุดเริ่มต้นของ javascript) มันจะมีคำสั่งเริ่มต้น application อยู่คือ createApp
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
createApp(App).mount('#app')
createApp
คือจุดเริ่มต้นในการสร้าง vue application- component ที่ใส่ไป
createApp
= Root component - application จะไม่สามารถเกิดขึ้นได้หากไม่เกิดการ mount เข้า HTML DOM จริงๆ = ซึ่งนั่นก็คือ
<div id="app"></div>
.mount('#app')
คือการนำ javascript (ที่เขียนด้วย Vue component) ใส่กลับเข้าไปใน DOM html เพื่อให้สามารถ render จุดเริ่มต้นของ application ได้
ที่ index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
ซึ่งจริงๆ Vue instance สามารถ สร้างมากกว่า 1 อันได้เช่น
const app1 = createApp({
/* ... */
})
app1.mount('#container-1')
const app2 = createApp({
/* ... */
})
app2.mount('#container-2')
แต่ตามปกติ สำหรับ Single Page Application นั้นสามารถใช้ id เป็นตัวแทนตัวเดียวก็ได้
พื้นฐานของ Component ประกอบด้วยอะไรบ้าง (Template Syntax)
1 Component ประกอบด้วย 3 ส่วนใหญ่ๆ
<script>
/* ส่วนสำหรับวาง script ของ Vue*/
</script>
<template>
<!-- ส่วนสำหรับวาง html ของ vue-->
</template>
<style>
/* สำหรับใส่ style ของ component */
</style>
มาลอง Hello world Vue กันก่อน
- เราจะทำการลบทั้งหมดใน App.vue
- สร้างใหม่เป็นแบบนี้แทน โดย
- เพิ่มตัวแปร 1 ตัวคือ message
- สร้าง html div 1 ตัวที่แสดง message และใส่ class เข้าไป
- และลองใช้ tag style แต่ง class นั้นดู
<script setup>
const message = 'Hello world'
</script>
<template>
<div class="text">{{ message }}</div>
</template>
<style>
.text {
font-size: 40px;
color: blue;
}
</style>
ผลลัพธ์จะได้ออกมาเป็นแบบนี้
เราจะมาเริ่มจากเรื่องแรก การ data binding กัน