vue中require引入路径存在变量

本文介绍了在Vue项目中如何处理后台动态返回的图片名称,通过require.context结合后台数据,实现动态加载图片资源,解决require路径拼接报错的问题,并展示了关键代码和实际效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

        菜单icon是通过后台获取的,但图片本身存在前端,后台返回的数据是图片名称。

问题

        直接使用require(‘路径名’+图片名+’.png’)报错:
在这里插入图片描述

解决思路

        使用require.context找到图片相关信息,名称和路径等,然后把名称和后台传过来的图片名称比较,相同的就把对应的图片路径赋值。

关键代码

const path = require("path");
const icons = require.context("@assets/img/home/system", false, /\.png$/);  // 获取@assets/img/home/system文件夹下(不包括子文件夹)所有的png文件,这里是一个webpackContext对象
this.$api.help1.menu().then(res => {
  if (res.code === 2000) {
    let data = res.data;
    data.menu.forEach(item => {
      let iconItem;
      let activeIconItem;
      icons.keys().forEach(key => {  // 遍历找到的png文件
        const name = path.basename(key, ".png");  // 获取图片名称
        if (name === item.icon) {
          iconItem = icons(key).default || icons(key);  // 这里webpack已经帮我们把图片资源编译成了base64文件,这里的iconItem实际上是一串base64信息
        }
        if (name === item.active_icon) {
          activeIconItem = icons(key).default || icons(key);
        }
      });
      let menuItem = {
        id: item.url,
        icon: iconItem,
        active_icon: activeIconItem,
        name: item.title,
        path: item.url,
        children: []
      };
      this.menuList.push(menuItem);
    });
  } else {
    this.$message({
      message: res.msg,
      type: "warning"
    });
  }
});

效果图

在这里插入图片描述

参考文档:
依赖管理 | webpack 中文文档

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值