zoukankan      html  css  js  c++  java
  • 笔记 解决vue3动态绑定本地图片失效问题

    不少人在vue的开发中遇到这样一个问题: img的src属性绑定url变量,然而图片加载失败。

    大部分的情况中,是开发者使用了错误的写法,例如:

    <img src="{{ imgUrl }}"/>

    这样写肯定是不对的,正确的写法应该使用v-bind:

    <img v-bind:src="imgUrl"/>

    不过,有时候即使使用了正确的语法,依旧无法显示图片,因为你的imgUrl使用了本地图片的路径。

    现在,我们要在App.vue里使用位于src/assets/目录下的logo.png图片,于是,我们设:

    imgUrl = './assets/logo.png'

    奇怪的事情出现了,图片加载失败。查看网页源代码,发现一个错误。

    我们发现,网页把根域名作为相对路径的根目录了,然而我们文件的路径是相对于项目文件的根目录的,当然就找不到了。

    既然这样,那我们去找build后的dist文件夹。是不是说只要把url改成./static/img/logo.png就可以了呢?依然是不行的。打开img文件夹我们可以发现,所有的文件名后都被添加上了一个随机字符串,原始的文件名已经无法对应了。

    那么,到底应该怎么加载本地图片呢?回头看vue-cli的文件结构,发现其中有一个叫做static的文件夹,尝试将logo.png放入这个文件夹,然后修改imgUrl:

    imgUrl = '/static/logo.png'

    成功读取到了logo.png. 执行npm run build后查看dist文件,发现logo.png原封不动地放在了根目录下。

    原来,之前的目录结构是有问题的,图片一类的静态文件,应该放在这个static文件夹下,这个文件夹下的文件(夹)会按照原本的结构放在网站根目录下。这时我们再去使用/static绝对路径,就可以访问这些静态文件了。

    但是,放到static里面webpack打包后只会把资源复制到发布目录而不会把小图片优化为base64。

    为了兼顾可以把图片资源优化,所以还是不适合把图片资源放到static。

    另外,如果说想在不调整目录结构的情况下读取本地图片,还有一个方法,那就是直接传入图片编码。即:

     

    imgUrl = require('./assets/logo.png')

    使用require定义之后,你就可以动态使用了,不用require,就只能写死路径的。不用require,  :src="'../img/image.jpg'" 会被解析为字符串。用了require,就是将图片当成模块先引进来,再绑定。

    methods: {

       getThumb(type) {

         let thumb = {

           WMS: require("img/world.jpg"),

           WFS: require("img/wfs.jpg"),

           tool: require("img/tool.jpg")

         };

         return thumb[type];

       }

    }

    如果做的是纯静态的网站展示,有许多的本地静态资源需要加载,里面包括本地数据和本地图片混合的好几组,建议使用static方式。其他情况下建议使用require方式

    当图片保存在本地,然后将其路径放入数据库,再取出来的时候就会出现问题

     this.list[i].tpicture是图片的完整地址
    即这种写法:
    src="…/assets/product.jpg";
    imgSrc = require("…/assets/product.jpg")
    这是错误的,require里边应该是path,所以应该写成这样:
    ‘…/assets/’+this.list[i].tpicture,即图中的形式:

     所以在数据库中保存的时候只需要保存后半部分地址就可以,assets以及之前的地址是不需要保存到数据库的。

    转自:https://www.cnblogs.com/ranyonsue/p/11608760.html

         https://blog.csdn.net/qq_44214519/article/details/111345151

  • 相关阅读:
    使用buildbot实现持续集成(转载)
    python 资料
    webdriver(python)学习笔记七——多层框架定位与智能等待
    webdriver(python)学习笔记六——操作测试对象
    webdriver(python)学习笔记五——层级定位
    webdriver(python)学习笔记四——定位一组元素
    keepalived工作原理和配置文件说明
    KeepAlived+MySQL互为主从
    利用keepalived和haproxy配置mysql的高可用负载均衡
    Linux系统安装Apache 2.4.6
  • 原文地址:https://www.cnblogs.com/NExt-O/p/14173351.html
Copyright © 2011-2022 走看看