Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 6: การ Binding ข้อมูลแบบสองทาง (Two-Way Binding) ใน Vue.js

1. Two-Way Binding คืออะไร?

Two-Way Binding เป็นคุณสมบัติที่ช่วยให้ข้อมูลใน Vue.js สามารถเชื่อมโยงระหว่าง View (HTML) และ Model (JavaScript) ได้แบบสองทาง ซึ่งหมายความว่าการเปลี่ยนแปลงข้อมูลในฟอร์มจะสะท้อนกลับไปยัง Data ใน Component และในทางกลับกัน Data ที่เปลี่ยนแปลงใน Component ก็จะอัปเดต View โดยอัตโนมัติ

Vue.js ใช้ Directive v-model เพื่อรองรับการทำ Two-Way Binding


2. การใช้งาน v-model

v-model สามารถใช้กับฟอร์ม Input เช่น <input>, <textarea> และ <select>

ตัวอย่างพื้นฐาน:

&lt;template>
  &lt;div>
    &lt;h1>Two-Way Binding Example&lt;/h1>
    &lt;input v-model="message" placeholder="Type something..." />
    &lt;p>You typed: {{ message }}&lt;/p>
  &lt;/div>
&lt;/template>

&lt;script>
export default {
  data() {
    return {
      message: ''
    };
  }
};
&lt;/script>

ผลลัพธ์:

  • เมื่อพิมพ์ข้อความใน Input ข้อมูลใน message จะเปลี่ยนแปลงทันที และข้อความใน <p> จะแสดงผลตามข้อมูลที่พิมพ์

3. การใช้งานกับประเภท Input อื่น ๆ

Checkbox

&lt;template>
  &lt;div>
    &lt;h1>Checkbox Example&lt;/h1>
    &lt;input type="checkbox" v-model="isChecked" />
    &lt;p>Checkbox is {{ isChecked ? 'checked' : 'not checked' }}&lt;/p>
  &lt;/div>
&lt;/template>

&lt;script>
export default {
  data() {
    return {
      isChecked: false
    };
  }
};
&lt;/script>

Radio Button

&lt;template>
  &lt;div>
    &lt;h1>Radio Button Example&lt;/h1>
    &lt;input type="radio" id="option1" value="Option 1" v-model="selectedOption" />
    &lt;label for="option1">Option 1&lt;/label>

    &lt;input type="radio" id="option2" value="Option 2" v-model="selectedOption" />
    &lt;label for="option2">Option 2&lt;/label>

    &lt;p>Selected: {{ selectedOption }}&lt;/p>
  &lt;/div>
&lt;/template>

&lt;script>
export default {
  data() {
    return {
      selectedOption: ''
    };
  }
};
&lt;/script>

Dropdown (Select)

&lt;template>
  &lt;div>
    &lt;h1>Select Example&lt;/h1>
    &lt;select v-model="selected">
      &lt;option disabled value="">Please select an option&lt;/option>
      &lt;option value="Option 1">Option 1&lt;/option>
      &lt;option value="Option 2">Option 2&lt;/option>
    &lt;/select>
    &lt;p>Selected: {{ selected }}&lt;/p>
  &lt;/div>
&lt;/template>

&lt;script>
export default {
  data() {
    return {
      selected: ''
    };
  }
};
&lt;/script>

4. การใช้ Two-Way Binding กับ Object

คุณสามารถใช้ v-model กับ Object เพื่อจัดการข้อมูลที่ซับซ้อนได้

&lt;template>
  &lt;div>
    &lt;h1>Two-Way Binding with Object&lt;/h1>
    &lt;input v-model="user.name" placeholder="Enter your name" />
    &lt;input v-model="user.age" type="number" placeholder="Enter your age" />
    &lt;p>Name: {{ user.name }}&lt;/p>
    &lt;p>Age: {{ user.age }}&lt;/p>
  &lt;/div>
&lt;/template>

&lt;script>
export default {
  data() {
    return {
      user: {
        name: '',
        age: null
      }
    };
  }
};
&lt;/script>

5. การทำงานร่วมกับ Validation

คุณสามารถผสมผสาน v-model กับ Validation เพื่อควบคุมการป้อนข้อมูลในฟอร์ม

&lt;template>
  &lt;div>
    &lt;h1>Validation Example&lt;/h1>
    &lt;input v-model="email" placeholder="Enter your email" />
    &lt;p v-if="!isValidEmail">Invalid email address&lt;/p>
  &lt;/div>
&lt;/template>

&lt;script>
export default {
  data() {
    return {
      email: ''
    };
  },
  computed: {
    isValidEmail() {
      return this.email.includes('@');
    }
  }
};
&lt;/script>

ผลลัพธ์:

  • ข้อความ “Invalid email address” จะแสดงเมื่ออีเมลไม่ถูกต้อง

6. สรุป

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ:

  • การใช้งาน v-model สำหรับ Two-Way Binding
  • การประยุกต์ใช้งานกับ Input ประเภทต่าง ๆ เช่น Checkbox, Radio, และ Select
  • การจัดการข้อมูลที่ซับซ้อนด้วย Object
  • การเพิ่ม Validation สำหรับฟอร์ม

ในบทถัดไป เราจะเรียนรู้เกี่ยวกับการแสดงผลแบบเงื่อนไข (Conditional Rendering) ด้วย v-if และ v-show!