1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName"></use> </svg> </template>
<script> import { computed, ref } from "@vue/composition-api"; // 解析svg const req = require.context("@/assets/svg", false, /\.svg$/); const requireAll = (requireContext) => { return requireContext.keys().map(requireContext); }; requireAll(req);
// require.context(‘./svg’, false, /\.svg$/) 参数说明: // 第一个:目录 // 第二个:是否遍历子级目录 // 第三个:定义遍历文件规则
export default { name: "SvgIcon", props: ["iconClass", "className"], setup(props, { root }) { // 计算属性,得出最终结果并返回 const iconName = computed(() => `#icon-${props.iconClass}`); const svgClass = computed(() => { if (props.className) return `svg-icon ${props.className}`; return "svg-icon"; }); return { iconName, svgClass, }; }, }; </script>
<style lang="scss"> .svg-icon { width: 1em; height: 1em; // 添加fill后可修改color fill: currentColor; color: white; } </style>
|