# JavaScript Framework
Framework คือ โครงร่างของ application ซึ่งมีการจัดเตรียม function พื้นฐานไว้ให้นักพัฒนาสามารถนำไปใช้ในการพัฒนา application ไม่ว่าจะเป็น web, mobile โดย framework นั้นจะช่วยให้นักพัฒนาสามารถใช้เวลาในการพัฒนาในส่วนของ business logic หรือ business function โดยที่ไม่ต้องกังวลในส่วนของ non-function ต่าง ๆ เช่น การจัดการ network, การควบคุมการแสดงผลของ browser และ mobile
# แบบฝึกหัด
# 1. Vue Components => Data
Data เป็นองค์ประกอบหลักของ Vue components ซึ่งมีหน้าที่ในการเก็บค่าตัวแปรต่าง ๆ เพื่อใช้ในการแสดงผลใน component นั้น ๆ ซึ่งหากข้อมูลใน Data ถูกเปลี่ยนแปลงไม่ว่าจะเป็นจาก user input หรือ JS ข้อมูลจะถูกอัพเดทไปยัง DOM ที่แสดงผลโดยอัตโนมัติ
- ให้สร้าง vue project ขึ้นใหม่ ใน workspace เดิม โดยใช้ชื่อ wk05-name (เปลี่ยน name เป็นชื่อตัวเอง)
d:\
cd toolb\workspace
vue create wk05-is322
2
3
- สร้างไฟล์ ButtonCounter.vue ในโฟล์เดอร์ src/components ดังด้านล่าง
<template>
<div class="container">
<button v-on:click="count++">You clicked me {{ count }} times.</button>
</div>
</template>
<script>
export default {
name: 'ButtonCounter',
data: function() {
return {
count: 0,
}
}
}
</script>
<style scoped>
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- แก้้ไฟล์ App.vue ในโฟล์เดอร์ src ในส่วนของ script โดย import ButtonCounter components ที่เพิ่งสร้าง และ export รวมไปกับ components ของ main app ดังด้านล่าง
<script>
import ButtonCounter from './components/ButtonCounter.vue'
export default {
name: 'app',
components: {
ButtonCounter
}
}
</script>
2
3
4
5
6
7
8
9
10
- จากนั้นเราสามารถเรียกใช้ ButtonCounter component ได้โดยการใส่ HTML tag ที่เป็นชื่อเดียวกับ component ในส่วนของ template ดังด้านล่าง (ไฟล์ App.vue)
<template>
<div id="app">
<ButtonCounter></ButtonCounter>
</div>
</template>
2
3
4
5
- เราสามารถที่จะเรียกใช้ components ซ้ำหลาย ๆ ครั้ง (reuse) ได้โดยการเพิ่มจำนวน HTML tag
<template>
<div id="app">
<ButtonCounter></ButtonCounter>
<ButtonCounter></ButtonCounter>
<ButtonCounter></ButtonCounter>
</div>
</template>
2
3
4
5
6
7
- เราสามารถเรียกใช้ component แบบ Sentence style แบบก่อนหน้า หรือแบบ hyphen style ดังด้านล่าง
<template>
<div id="app">
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
</div>
</template>
2
3
4
5
6
7
# 2. Vue Components => Properties
Components ต่าง ๆ ที่เราสร้างขึ้นนั้นสามารถรับข้อมูลจาก components ที่อยู่เหนือกว่าได้โดยการส่งข้อมูลผ่าน properties ดังตัวอย่าง
<blog-post title="My journey with Vue"></blog-post>
<blog-post title="Blogging with Vue"></blog-post>
<blog-post title="Why Vue is so fun"></blog-post>
2
3
- สร้างไฟล์ BlogPost.vue ในโฟล์เดอร์ src/components ดังด้านล่าง
<template>
<div class="container">
<h3>{{ title }}</h3>
</div>
</template>
<script>
export default {
name: 'BlogPost',
props: ['title']
}
</script>
<style scoped>
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
- แก้้ไฟล์ App.vue ในโฟล์เดอร์ src ในส่วนของ script โดย import BlogPost components ที่เพิ่งสร้าง และ export รวมไปกับ components ของ main app ดังด้านล่าง
<script>
import BlogPost from './components/BlogPost.vue'
import ButtonCounter from './components/ButtonCounter.vue'
export default {
name: 'app',
components: {
BlogPost,
ButtonCounter
}
}
</script>
2
3
4
5
6
7
8
9
10
11
12
- จากนั้นเราก็ใส่ HTML tag ของ BlogPost component พร้อมใส่ properties ชื่อ title ดังด้านล่าง
<template>
<div id="app">
<blog-post title="My journey with Vue"></blog-post>
<blog-post title="Blogging with Vue"></blog-post>
<blog-post title="Why Vue is so fun"></blog-post>
<button-counter></button-counter>
</div>
</template>
2
3
4
5
6
7
8
- จากตัวอย่างด้านบน จะเห็นว่าเราต้องเรียกใช้งาน BlogPost component ถึง 3 ครั้งหากเรามีข้อมูลมากกว่านี้ ก็จะต้องเขียน HTML tag ซ้ำ ๆ หลาย ๆ รอบ ซึ่ง Vue.js นั้นสามารถช่วยเราแก้ปัญหานี้ได้โดยการสร้าง data function ใน App.vue (อย่าลืมใส่ "," หลัง components{}) โดยใน data function จะเห็นว่ามี posts ซึ่งเป็น object array โดยแต่ละ object นั้นมี id และ title เป็น properties ซึ่งในที่นี้ posts มี 3 objects ใน array
<script>
import BlogPost from './components/BlogPost.vue'
import ButtonCounter from './components/ButtonCounter.vue'
export default {
name: 'app',
components: {
BlogPost,
ButtonCounter
},
data: function() {
return {
posts: [
{ id: 1, title: 'My journey with Vue' },
{ id: 2, title: 'Blogging with Vue' },
{ id: 3, title: 'Why Vue is so fun' }
]
}
}
}
</script>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- จากนั้นทำการแก้ไข HTML template โดยเปลี่ยนจากการเรียกใช้ BlogPost component 3 ครั้งเป็นการเรียกใช้ครั้งเดียว แต่ใช้ List Rendering feature ผ่าน v-for ซึ่ง v-for จะทำหน้าที่วนลูปจาก array ใน posts ที่ได้จาก data function ซึ่ง v-for จะโยนค่าของ array แต่ละตัวลงในตัวแปล post (post in posts) จากนั้น v-bind จะนำหน้าที่ส่งต่อข้อมูลไปยัง properties ของ BlogPost component
หมายเหตุ v-for นั้นบังคับให้ต้องมี v-bind:key เพื่อใช้เป็นตัวกำหนด element แต่ละตัวใน array ซึ่งในที่นี้เราไม่ได้นำ key ไปใช้ต่อใน BlogPost component
<template>
<div id="app">
<blog-post
v-for="post in posts"
v-bind:key="post.id"
v-bind:title="post.title">
</blog-post>
<button-counter></button-counter>
</div>
</template>
2
3
4
5
6
7
8
9
10
# 3. ทดลองสร้าง Vue components
- สร้าง Blog websites ที่ประกอบไปด้วย
- Header
- Navigation Bar/Menu Bar
- Blogs List
- Footer
- Push งานขึ้นบน GitHub ตาม repository ของแต่ละคน
# วิธีการใช้งาน GitHub
- ตั้งค่า git โดยใส่ชื่อ ชื่อสกุล และอีเมล์เดียวกับที่ลงทะเบียนไว้กับ GitHub
git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "MY_NAME@example.com"
2
สร้าง repository บน GitHub ในที่นี้ใช้ชื่อ wkxx-name (เปลี่ยนเลขทุกสัปดาห์ และใส่ชื่อของตัวเอง)
ทำการ initial git และ push ไฟล์โปรเจ็คทั้งหมดไปยัง GitHub (อย่าลืมเปลี่ยน wkxx-name เป็นชื่อ repository ของตัวเอง)
git init
git add .
git commit -m "week 05 homework"
git remote add origin https://github.com/is322/wkxx-name.git
git push -u origin master
2
3
4
5