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

26 May 2018

Share to:

สวัสดีครับ ในหัวข้อนี้จะเกี่ยวข้องกับรูปแบบการเขียน หรือ 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

การใช้ usb wifi กับ Raspberry Pi

ในบทความนี้ ผมจะแนะนําการใช้ usb wifi กับ Raspberry Pi มาเริ่มกันเลยครับ ขั้นตอนแรกถ้าเราต้องการจะ Scan หาว่ามี wifi rounter ตัวไหนอยู่บริเวณนี้บ้าง ใช้คําสั่งนี้

ซ่อม Hard disk WD My Passport USB เสีย (แปลงจาก USB เป็น SATA)

Hard disk WD My Passport เป็นรุ่นที่ตัวของ Hard disk เป็น Port USB มาบนบอร์ดเลย แทนที่จะเป็น SATA เหมือน Hard disk ทั่วไป เมื่อ USB เสียเราจะไม่สามารถนําข้อมูลออกมาได้ ซึ่งจะต่างจาก Hard disk ทั่วๆไป ที่สามารถถอดตัว Hard disk มาจัมพ์กับ Computer ผ่านทางสาย SATA เพื่อนําข้อมูลออกมาได้

sql delete

sql delete เป็นคําสั่ง ที่ใช้ในการลบข้อมูลในตาราง โดยสามารถลบข้อมูลตามเงื่อนไข where ที่ผู้ใช้กําหนดDatabase supportMySQL, Microsoft Access, SQL Server, Oracleรูปแบบการใช้


Copyright © 2019 - 2024 thiti.dev |  v1.19.0 |  Privacy policy |  status | 

            วงแหวนเว็บ