Introduction to Vue 2.7 features, Composition API backport, and core framework syntax.
Giới thiệu Vue 2
Ghi chú cá nhân — Tài liệu này viết cho bản thân để tham chiếu nhanh khi phát triển Vue 2.7.x, đặc biệt trong môi trường AEM (Adobe Experience Manager).
Vue.js là gì?
Vue (phát âm là /vjuː/, giống như view) là một Progressive JavaScript Framework dùng để xây dựng giao diện người dùng (UI). Không giống như các monolithic framework, Vue được thiết kế từ đầu để có thể áp dụng từng phần (incrementally adoptable).
- Core chỉ tập trung vào view layer → dễ tích hợp với thư viện hoặc dự án sẵn có.
- Kết hợp với tooling hiện đại → xây dựng Single-Page Applications (SPA) phức tạp.
Vue 2.7.x là phiên bản LTS cuối của Vue 2, vẫn được dùng phổ biến trong dự án AEM vì:
- AEM clientlibs tương thích tốt với Vue 2 runtime build (không cần bundler).
- HTL (HTML Template Language) render server-side → Vue mount vào DOM đã có sẵn.
- Vue 2.7 backport Composition API từ Vue 3 → có thể dùng
setup(),ref(),computed()mà không cần nâng cấp. :::
Tương thích trình duyệt
Vue 2 không hỗ trợ IE8 vì sử dụng các tính năng ECMAScript 5 không thể polyfill trên IE8. Tuy nhiên hỗ trợ tất cả trình duyệt tuân thủ ECMAScript 5.
Phiên bản mới nhất
::: warning EOL Notice Vue 2 đã chính thức End of Life vào 31/12/2023. Không còn nhận security patches mới. Với dự án AEM cũ vẫn dùng Vue 2, hãy kiểm soát dependency chặt chẽ.
Cài đặt
1. CDN (Đơn giản nhất — dùng trong AEM clientlibs)
Phù hợp để prototype hoặc tích hợp trực tiếp vào AEM clientlib mà không cần build step:
Không dùng bản minified trong môi trường development — sẽ mất đi toàn bộ warning hữu ích khi debug!
Cho production, pin cụ thể version để tránh breaking changes bất ngờ:
Nếu dùng ES Modules native trong browser:
2. NPM (Khuyến nghị cho dự án lớn)
NPM kết hợp tốt với các module bundler như Webpack hoặc Rollup, và hỗ trợ [Single File Components (.vue)]
3. Vue CLI
Vue cung cấp official CLI để scaffold SPA nhanh chóng:
CLI yêu cầu kiến thức về Node.js và build tools. Nếu mới bắt đầu, hãy thử CDN trước!
Các loại build của Vue 2
Vue 2 cung cấp nhiều build khác nhau trong thư mục dist/. Hiểu rõ để chọn đúng build cho từng môi trường:
Full vs Runtime-only
Khi dùng vue-loader với file .vue, template đã được pre-compile → chỉ cần Runtime build, nhẹ hơn 30%.
Cấu hình alias Webpack (dùng Full build)
Development vs Production Mode
Webpack 4+ (khuyến nghị)
Webpack 3 (dùng DefinePlugin)
CSP (Content Security Policy)
Một số môi trường (ví dụ: Google Chrome Apps) áp dụng CSP, cấm new Function() — tính năng mà Full build dùng để compile template.
Giải pháp: Dùng Runtime-only build kết hợp với vue-loader / vueify để pre-compile template → hoàn toàn tương thích CSP.
AEM render HTML server-side qua HTL. Vue mount vào DOM có sẵn → không cần compile template phía client → dùng Runtime-only build là đủ và tối ưu nhất!
Vue Devtools
Cài extension để debug Vue app dễ dàng hơn:
Với AEM, đôi khi Vue Devtools không detect được app nếu Vue được load trong AEM clientlib iframe. Hãy kiểm tra Console để xem Vue instance đã được mount chưa.
Luồng hoạt động cơ bản
Tips & Tricks — Vue 2 + AEM HTL
Tránh xung đột HTL và Vue template syntax
HTL dùng $\{\} và $\{'...'\}, Vue dùng \{\{ \}\}. Chúng không xung đột nhau vì:
- HTL xử lý server-side (Java) → render ra HTML thuần.
- Vue xử lý client-side (JavaScript) → mount vào DOM đã render xong.
Truyền data từ HTL sang Vue qua data-* attributes
Sử dụng v-cloak để tránh FOUC (Flash of Uncompiled Content)
v-cloaksẽ được Vue tự động xóa sau khi mount → tránh hiện\{\{ message \}\}thô trước khi Vue chạy.