Vue.js เริ่มต้น ตอน3 (Template syntax)

26 May 2018,
Share: 

สวัสดีครับ ในหัวข้อนี้จะเกี่ยวข้องกับรูปแบบการเขียน หรือ Syntax ของ Template ที่อยู่ภายใน Component หรือพูดง่ายๆก็คือการเขียน UI ของ Component นั้นแหละครับ ซึ่งมันจะเขียนเป็น HTML ธรรมดา แต่ก็จะมี Syntax บางอย่างที่จะเขียนในรูปแบบของ Vue ซึ่งจะทําให้เราเขียน Code ได้ง่ายขึ้น ถ้ายังนึกไม่ออกว่า Template มัน

อยู่ตรงไหน ดูรูปด้านล่างนี่ครับ

Image

มาเริ่มเรียนกันได้เลยครับ

Text

เราสามารถใส่ Data binding เข้าไปใน Template ของเราได้ครับ ถ้าให้เข้าใจง่ายๆ ก็คือสามารถใส่ตัวแปล Javascript ที่เราสร้างภายใน Component เข้าไปใน Template ได้  ซึ่งถ้าข้อมูลในตัวแปรเปลี่ยนแปลง UI ก็จะเปลี่ยนแปลงตามไปด้วย โดยเราจะเขียนอยู่ใน {{ }} ครับ ตามตัวอย่าง

<span>Message: {{ msg }}</span>

จากตัวอย่าง msg เป็นตัวแปล Javascript อยู่ถูกประกาศภายใน Component instanse ถ้าไม่ต้องการให้ UI เปลี่ยนแปลง เมื่อข้อมูลเปลี่ยน เราสามารถใส่ v-once เข้าไปได้ ตามตัวอย่างนี้

<span v-once>This will never change: {{ msg }}</span>

Raw HTML

ปกติถ้าเราใช้ {{ msg }} จะแสดงผลเป็น Text เท่านั้น ไม่ว่าข้อมูลนั้นจะเป็น Tag HTML ก็ตาม แล้วถ้าเราต้องการให้แสดงผล output ของ HTML เราสามารถใช้ v-html ได้ครับ ตามตัวอย่างด้านล่าง

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

จะได้ผลประมาณนี้

Image

Span จะถูกเปลี่ยนไปเป็น Tag HTML ของ “rawHtml” ทันทีครับ

Attributes

โดยปกติแล้วเราจะไม่สามารถใช้ {{ }} ภายใน HTML Attributes ได้ ถ้าต้องการใช้ก็สามารถทําได้ โดยใช้ v-bind ตามตัวอย่าง

<div v-bind:id="dynamicId"></div>

กรณีที่เป็น boolean ใน v-bind ตามตัวอย่างนี้

<button v-bind:disabled="isButtonDisabled">Button</button>

ถ้า isButtonDisabled มีข้อมูลเป็น null, undefined, หรือ false Attribute disabled จะไม่ถูกเพิ่มเข้าไปใน HTML Attribute

Using JavaScript Expressions

เราสามารถใส่ Javascript ใน Template ได้ครับ แต่มีเงือนไขอยู่ว่า จะต้องเป็น  only contain one single expression เสมอ ตามตัวอย่างด้านล่าง

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id"></div>

ส่วน Javascript ที่ไม่เป็น  only contain one single expression จะไม่สามารถทํางานได้ ดังตัวอย่างนี้

<!-- this is a statement, not an expression: -->
{{ var a = 1 }}

<!-- flow control won't work either, use ternary expressions -->
{{ if (ok) { return message } }}

Directives

Vue.js จะมี Spacial attributes ซึ่งจะใช้ v- นําหน้า เช่น v-if และยังมี Special attributes อื่นๆอีก แต่ในบทความนี้จะขอยกตัวอย่าง v-if ซึ่งสามารถเขียนได้ตามนี้

<p v-if="seen">Now you see me</p>

จากตัวอย่าง v-if จะมีความหมายคือ remove/insert HTML

ตามข้อมูลที่อยู่ใน seen ถ้าข้อมูลที่อยู่ใน seen เป็น  True จะ insert

แต่ถ้าเป็น False ก็จะ Remove

Arguments

ในบาง HTML Tag จะมีการรับค่า Arquments เช่น เราสามารถใช้ v-bind: แล้วตามด้วย ชื่อได้เลย ตัวอย่าง

<a v-bind:href="url"> ... </a>

หรือถ้าเป็น Event เช่น onClick ก็สามารถใช้ v-on: ได้เลย ตัวอย่าง

<a v-on:click="doSomething"> ... </a>

Shorthands

เราสามารถเขียน v-bind และ v-on แบบสั้นๆได้โดยใช้ : และ @ ตามตัวอย่าง

<!-- full syntax -->
<a v-bind:href="url"> ... </a>

<!-- shorthand -->
<a :href="url"> ... </a>

<!-- full syntax -->
<a v-on:click="doSomething"> ... </a>

<!-- shorthand -->
<a @click="doSomething"> ... </a>

จบครับ เจอกันบทความหน้าครับ :)

Suggestion blogs

การใช้คําสั่ง tar เพื่อบีบอัดไฟล์ แตกไฟล์ ใน ubuntu

การบีบอัดไฟล์tar เป็นคําสั่งที่ใช้ บีบอัดไฟล์หรือ Directory ให้เป็นไฟล์เดียว เพื่อง่ายต่อการย้ายหรือ copy เราสามารถใช้งานได้ดังนี้

ค่าเฉลี่ยกําลังสอง RMS Root Mean Square

ค่าเฉลี่ยกําลังสอง RMS Root Mean Square คืออะไรค่าเฉลี่ยกําลังสอง RMS Root Mean Square เป็นการวัดทางสถิติของปริมาณที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา ยกตัวอย่างเช่น กรณีที่เป็นการหาค่าเฉลี่ยปกติจะนําค่าที่สูงบ้างตํ่าบ้างมาบวกกันแล้วหารด้วยจํานวนของข้อมูลที่นํามาบวกกัน แต่เมื่อใดที่เราใช้วิธีการดังกล่าว มาหาค่าเฉลี่ยของไฟฟ้ากระแสสลับจะเกิดปัญหาครับ เพราะว่า ไฟฟ้ากระแสสลับจะมีทั้งช่วงบวกและลบ

Creative Commons (CC)

สัญญาอนุญาตครีเอทีฟคอมมอนส์ Creative Commons(CC)เป็นสัญญาอนุญาตที่ช่วยให้เจ้าของผลงาน หรือเจ้าของลิขสิทธิ์ สามารถให้สิทธิบางส่วนหรือทั้งหมดแก่สาธารณะ แต่ยังคงสงวนสิทธิอื่นๆไว้ โดยการแสดงสัญญาอนุญาตที่ผลงานของตนเอง เพื่อหลีกเลี่ยงการเกิดปัญหาลิขสิทธิ์ต่อการแบ่งปันสารสนเทศ


Copyright © 2019 - 2026 thiti.dev |  v1.60.2 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Nostr   Youtube channel   Telegram   Email contact   วงแหวนเว็บ