Bọc bất kỳ SVG nào thành component một tệp .vue — hoặc chỉ lấy khối template để đưa vào component bạn đã có.
SVGVueSFCscript setup
SVG → Vue
☞ chạy hoàn toàn trong trình duyệt — không có gì được tải lên
Thả tệp SVG của bạn vào đây
hoặc nhấp để chọn — chỉ nhận SVG
Component một tệp (.vue)
Tên component lấy từ tên tệp. Khối script chỉ dùng để đặt tên cho component — cứ xóa đi nếu bạn không cần.
Khối template
Chỉ phần đánh dấu, để dán vào một component bạn đã có. Nếu tệp SVG có phần tử style nội tuyến, phần CSS đó nằm trong khối style của tệp phía trên chứ không phải ở đây.
không phải đổi tên gì cả
Vì sao ở việc này Vue nhẹ công hơn React
Template của Vue được phân tích như HTML, nên một tệp SVG có thể đưa vào đúng như lúc nó được viết. stroke-width vẫn là stroke-width, class vẫn là class, và thuộc tính style nội tuyến vẫn chạy. Việc chuyển đổi chủ yếu chỉ là bọc lại tệp — vì thế kết quả trông rất giống đầu vào.
Phần còn lại do cơ chế truyền tiếp thuộc tính lo. Với một phần tử gốc duy nhất, mọi thứ bạn đặt lên component đều rơi xuống thẻ svg, nên width, class hay trình xử lý nhấp chuột đều chạy mà không cần khai báo prop nào.
ba bước
Cách chuyển SVG thành component Vue
01
Thả tệp SVG
Chọn một tệp .svg — nó vẫn nằm trên thiết bị của bạn.
02
Sao chép khối bạn cần
Cả tệp .vue, hoặc chỉ phần template.
03
Đưa vào dự án
Import như mọi component khác và định kích thước từ bên ngoài.
giải đáp nhanh
Câu hỏi thường gặp về SVG sang Vue
Vì sao không có khai báo props?
Vì bạn không cần. Component có một gốc duy nhất sẽ chuyển thẳng mọi thuộc tính bạn đưa vào tới thẻ svg, nên width, height, class và các trình lắng nghe sự kiện đều đã chạy sẵn. Chỉ khai báo props khi bạn muốn tính toán gì đó từ chúng.
Khối script setup để làm gì?
Chỉ để đặt tên cho component, cái tên sẽ hiện trong Vue devtools và trong các thông báo cảnh báo. Không có nó thì component vẫn hiển thị y hệt, nên xóa đi hoàn toàn an toàn.
Tệp SVG của tôi có phần tử style — nó đi đâu rồi?
Vào khối style có scoped ở cuối component. Vue loại bỏ thẻ style và script nằm trong template, nên một tệp SVG xuất từ Illustrator hay Figma — vốn gần như luôn kèm một bảng kiểu nội tuyến — sẽ hiển thị mất sạch màu. Chuyển phần CSS ra ngoài giữ cho nó tiếp tục chạy, còn scoped đảm bảo nó không rò sang phần còn lại của ứng dụng.
Làm sao đổi màu biểu tượng?
Thay giá trị fill hoặc stroke cố định bằng currentColor rồi đặt màu bằng CSS trên một phần tử cha. Công cụ đổi màu SVG có thể chuyển mọi màu trong tệp sang currentColor trước khi bạn chuyển đổi.
Tôi có cần Vue 3 không?
Với kết quả này thì có — script setup và defineOptions là tính năng của Vue 3. Trên Vue 2, khối template vẫn dùng được: cứ dán vào phần template của một component Options API thông thường.
Tệp của tôi có bị tải lên không?
Không. Việc chuyển đổi chỉ là xử lý chuỗi ký tự thuần túy diễn ra trong trình duyệt của bạn.