加载中...
  • 在 vue 中使用 svg 的方法 loading

    使用方式


    全局引入

    1
    npm install svg-sprite-loader -S

    配置vue.config.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // vue.config.js
    chainWebpack: (config) => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule
    .use("svg-sprite-loader")
    .loader("svg-sprite-loader")
    .options({
    symbolId: "icon-[name]",
    include: ["./src/icons"]
    });
    },

    制作组件SvgIcon

    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>

    引入组件

    1
    <svg-icon :iconClass="iconClass" :className="className"/>
    上一篇:
    Promise全面总结
    下一篇:
    前端安全:如何防范 XSS 和 CSRF
    本文目录
    本文目录