Rendering lists with v-for directive, key binding, and array mutation detection in Vue 2.7.
List Rendering
Lặp render danh sách bằng v-for. Trong AEM, list thường là mảng JSON từ Sling Model (vd danh sách card, link, item của multifield) được parse ra rồi render.
v-for với mảng
Cú pháp item in items. Có thể lấy thêm index bằng (item, index) in items.
v-for với object
Lặp qua property của object: (value, key, index).
Thứ tự lặp theo thứ tự key của Object.keys(), không đảm bảo ổn định tuyệt đối giữa các engine. Cần thứ tự cố định thì dùng mảng.
v-for với range
n chạy từ 1 đến số đó.
key là bắt buộc
Luôn gắn :key duy nhất và ổn định cho mỗi item. Vue dùng key để nhận diện và tái sử dụng đúng phần tử khi danh sách thay đổi.
Không dùng index làm key khi danh sách có thể thêm/xóa/sắp xếp lại. Index thay đổi theo vị trí, làm Vue map sai phần tử, gây lỗi state (vd giá trị input dính nhầm dòng).
Chỉ chấp nhận index làm key khi list tĩnh, không bao giờ đổi thứ tự.
v-for với template
Render nhiều phần tử cho mỗi vòng lặp mà không thêm thẻ bọc thừa:
Ở Vue 2, key đặt trên từng phần tử con bên trong <template>, không đặt trên <template>.
v-for với component
Truyền dữ liệu vào component con qua props. Component không tự biết về vòng lặp, phải truyền tường minh.
Array change detection
Vue 2 theo dõi được các mutation method của mảng, tự cập nhật view:
push, pop, shift, unshift, splice, sort, reverse.
Hai trường hợp Vue 2 KHÔNG phát hiện được:
Cách xử lý:
Method không mutate (trả về mảng mới) như filter, map, concat, slice thì gán lại biến để cập nhật:
Tips cho AEM
Render list từ JSON do Sling Model cung cấp qua data attribute.
Lưu ý key: dùng id từ JCR (vd path hoặc một field định danh) làm :key, tránh dùng index để giữ đúng state khi author thêm/xóa item trong dialog.