Using default, named, and scoped slots for component composition in Vue 2.7.
Slots
Slot cho phép cha truyền nội dung (template) vào trong con. Props truyền dữ liệu, slot truyền markup. Dùng để tạo component bao bọc (layout, card, modal) mà nội dung bên trong do nơi sử dụng quyết định.
Slot cơ bản
Con đặt <slot> làm chỗ chứa. Nội dung cha đặt giữa thẻ component sẽ thay vào đó.
Fallback content
Nội dung mặc định bên trong <slot> hiển thị khi cha không truyền gì.
<submit-button></submit-button> hiện "Submit". Truyền nội dung thì ghi đè fallback.
Named slots
Nhiều vùng nội dung thì đặt tên slot bằng attribute name. Cha nhắm slot bằng v-slot:name trên <template>.
Slot không tên là default slot. v-slot:header rút gọn thành #header.
Scoped slots
Khi nội dung slot cần dữ liệu từ chính con, con bind dữ liệu lên <slot> (slot props), cha nhận qua v-slot.
Scoped slot tách logic (con cung cấp dữ liệu) khỏi trình bày (cha quyết định markup). Dùng cho list, table tái sử dụng.
Tóm tắt
Tips cho AEM
Slot hữu ích cho layout/wrapper component dùng lại nhiều nơi trong frontend. Lưu ý: slot là khái niệm phía Vue, không liên quan HTL. HTL chèn nội dung server-side bằng data-sly-resource hoặc data-sly-include, còn slot chỉ hoạt động bên trong cây Vue đã mount.