BÀI 4: VUE DIRECTIVES – CÁC CHỈ THỊ CƠ BẢN

jk5587725

By jk5587725

Đăng ngày Tháng 7 7, 2025

Mục tiêu:

  • Biết cách hiển thị/ẩn phần tử với v-if, v-else, v-show
  • Biết cách lặp danh sách với v-for
  • Bắt sự kiện như click bằng v-on (@click)

Các chỉ thị quan trọng:

Vue DirectiveTác dụngGhi chú
v-if, v-else, v-else-ifẨn/hiện phần tử theo điều kiệnKhông render DOM nếu sai
v-showTương tự v-if nhưng chỉ ẩn bằng CSS (display: none)DOM vẫn tồn tại
v-for="item in list"Duyệt danh sáchGiống forEach
v-on:event="method"Bắt sự kiệnViết tắt: @event

Giao diện học (Code + Output)

<!DOCTYPE html>
<html lang="vi">
<head>
  <meta charset="UTF-8">
  <title>Vue Directives</title>
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  <style>
    body {
      font-family: Arial;
      display: flex;
      gap: 30px;
      padding: 20px;
    }
    .code {
      width: 50%;
    }
    .output {
      width: 50%;
      border-left: 2px solid #ccc;
      padding-left: 20px;
    }
    ul {
      padding-left: 20px;
    }
    button {
      margin: 10px 0;
    }
  </style>
</head>
<body>

  <div class="code">
    <h2>Mã nguồn Vue:</h2>
    <pre><code>&lt;div id="app"&gt;

  &lt;!-- v-if và v-else --&gt;
  &lt;p v-if="isLoggedIn"&gt;Chào mừng bạn quay lại!&lt;/p&gt;
  &lt;p v-else&gt;Vui lòng đăng nhập.&lt;/p&gt;
  &lt;button @click="toggleLogin"&gt;Đổi trạng thái đăng nhập&lt;/button&gt;

  &lt;!-- v-show --&gt;
  &lt;p v-show="showText"&gt;Đây là nội dung có thể ẩn/hiện.&lt;/p&gt;
  &lt;button @click="showText = !showText"&gt;Ẩn / Hiện nội dung&lt;/button&gt;

  &lt;!-- v-for --&gt;
  &lt;h3&gt;Danh sách sản phẩm:&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li v-for="(item, index) in products" :key="index"&gt;
      {{ index + 1 }}. {{ item }}
    &lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;

&lt;script&gt;
const { createApp } = Vue;
createApp({
  data() {
    return {
      isLoggedIn: false,
      showText: true,
      products: ['Chuột', 'Bàn phím', 'Màn hình']
    }
  },
  methods: {
    toggleLogin() {
      this.isLoggedIn = !this.isLoggedIn;
    }
  }
}).mount('#app')
&lt;/script&gt;
</code></pre>
  </div>

  <div class="output">
    <h2>Kết quả hiển thị:</h2>
    <div id="app">
      <!-- v-if và v-else -->
      <p v-if="isLoggedIn">Chào mừng bạn quay lại!</p>
      <p v-else>Vui lòng đăng nhập.</p>
      <button @click="toggleLogin">Đổi trạng thái đăng nhập</button>

      <!-- v-show -->
      <p v-show="showText">Đây là nội dung có thể ẩn/hiện.</p>
      <button @click="showText = !showText">Ẩn / Hiện nội dung</button>

      <!-- v-for -->
      <h3>Danh sách sản phẩm:</h3>
      <ul>
        <li v-for="(item, index) in products" :key="index">
          {{ index + 1 }}. {{ item }}
        </li>
      </ul>
    </div>
  </div>

  <script>
    const { createApp } = Vue;
    createApp({
      data() {
        return {
          isLoggedIn: false,
          showText: true,
          products: ['Chuột', 'Bàn phím', 'Màn hình']
        }
      },
      methods: {
        toggleLogin() {
          this.isLoggedIn = !this.isLoggedIn;
        }
      }
    }).mount('#app')
  </script>

</body>
</html>

Giải thích nhanh:

LệnhTác dụng
v-if / v-elseHiển thị một phần tử hoặc phần tử khác tùy điều kiện
v-showẨn/hiện bằng CSS (nhanh hơn nếu chỉ toggle)
v-for="item in list"Lặp danh sách, hiển thị từng phần tử
@click="method"Gọi hàm khi click nút

Bài tập mở rộng:

  1. Thêm sản phẩm mới vào products bằng 1 nút bấm.
  2. Thêm một biến role = "admin" và hiển thị "Trang quản trị" nếu là admin (dùng v-if).
  3. Dùng v-for lặp qua danh sách object dạng { name, price }.

📂 Chuyên mục:

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

[global_subscribe_form]

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.