美文网首页纵横研究院VU...
vue 动态加载图片路径

vue 动态加载图片路径

作者: YS909090 | 来源:发表于2019-06-25 00:03 被阅读282次

    在用vue-cli脚手架生成的vue项目开发中,动态加载图片本地运行没有问题,但是打包后图片无法显示,图片路径404找不到,
    相关代码如下:

    <template>
        <img :src="signalIconSrc['1']" class="basic-data-icon">
    </template>
    <script>
        export default {
            data() {
                return {
                signalIconSrc: {
                    1: '../../assets/images/xinhao-1@3x.png',
                    2: '../../assets/images/xinhao-2@3x.png',
                    3: '../../assets/images/xinhao-3@3x.png',
                }
            }
        }
    </script>
    

    在解决这个问题之前,先来了解下vue-cli生成的vue项目是如何进行图片资源打包的
    图片资源算是静态资源,而静态资源可以用两种方式进行处理

    1. 在 JavaScript 被导入或在 template/CSS 中通过相对路径被引用。这类引用会被 webpack 处理。
    2. 放置在 static 目录下或通过绝对路径被引用(vue-cli3是public目录)。这类资源将会直接被拷贝,而不会经过 webpack 的处理。

    在vue的项目中,webpack使用的是vue-loader,在编译过程中,所有的资源路径例如 <img src="...">、background: url(...) 和 @import 会作为模块依赖。
    而动态加载图片,图片的地址无法被解析,因此最终没有被打包到文件中,找不到该图片。

    相对应静态资源的处理方式,解决问题的方法也有两种
    1. 用require将图片作为模块引入
    signalIconSrc: {
        1: require('../../assets/images/xinhao-1@3x.png'),
        2: require('../../assets/images/xinhao-2@3x.png'),
        3: require('../../assets/images/xinhao-3@3x.png'),
    }
    
    1. 将图片放在static目录下(vue-cli3为public目录),使用绝对路径引用


      static目录
    signalIconSrc: {
        1: 'static/images/xinhao-1@3x.png',
        2: 'static/images/xinhao-2@3x.png',
        3: 'static/images/xinhao-3@3x.png',
    }
    

    相关文章

      网友评论

        本文标题:vue 动态加载图片路径

        本文链接:https://www.haomeiwen.com/subject/wcvaqctx.html