Đăng nhập

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

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 }.

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.

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