Vue動(dòng)態(tài)設(shè)置img的src不生效的問(wèn)題解決
原因分析
在vue項(xiàng)目中動(dòng)態(tài)設(shè)置img的src時(shí),圖片會(huì)加載失敗。我們可以先看個(gè)例子。
<template> <div> <h1>動(dòng)態(tài)設(shè)置圖片</h1> <div> <h5>圖片一</h5> <img :src=" logoFlag === 'vue' ? '../assets/vue-logo.png' : '../assets/react-logo.png' " /> <div> <button @click="changeLogo">切換</button> </div> <h5>圖片二</h5> <img :src="imgUrl" /> </div> </div> </template> <script> export default { name: "ImgTest", data() { return { logoFlag: "vue", imgUrl: "../assets/vue-logo.png", }; }, methods: { changeLogo() { this.logoFlag = this.logoFlag === "vue" ? "react" : "vue"; }, }, }; </script> <style scoped> img { width: 50px; height: 50px; } </style>
由結(jié)果可以看出圖片加載失敗。
查看elements之后會(huì)發(fā)現(xiàn),src被當(dāng)做靜態(tài)資源處理了,并沒(méi)有進(jìn)行編譯。
解決方法
為了解決動(dòng)態(tài)的src沒(méi)有進(jìn)行編譯的問(wèn)題,我們可以使用require引入圖片。
<template> <div> <h1>動(dòng)態(tài)設(shè)置圖片</h1> <div> <h5>圖片一</h5> <img :src=" logoFlag === 'vue' ? require('../assets/vue-logo.png') : require('../assets/react-logo.png') " /> <div> <button @click="changeLogo">切換</button> </div> <h5>圖片二</h5> <img :src="imgUrl" /> </div> </div> </template> <script> export default { name: "ImgTest", data() { return { logoFlag: "vue", imgUrl: require("../assets/vue-logo.png"), }; }, methods: { changeLogo() { this.logoFlag = this.logoFlag === "vue" ? "react" : "vue"; }, }, }; </script> <style scoped> img { width: 50px; height: 50px; } </style>
可以看到使用require引入圖片之后,圖片就可以正常加載出來(lái)了。
import和require的區(qū)別
require是在運(yùn)行時(shí)加載,而import是編譯時(shí)加載;
如果希望使用import引入圖片就需要提前導(dǎo)入圖片。
<template> <div> <h1>動(dòng)態(tài)設(shè)置圖片</h1> <div> <h5>圖片一</h5> <img :src=" logoFlag === 'vue' ? require('../assets/vue-logo.png') : require('../assets/react-logo.png') " /> <div> <button @click="changeLogo">切換</button> </div> <h5>圖片二</h5> <img :src="imgUrl" /> </div> </div> </template> <script> import reactLogo from "../assets/react-logo.png"; export default { name: "ImgTest", data() { return { logoFlag: "vue", imgUrl:reactLogo, }; }, methods: { changeLogo() { this.logoFlag = this.logoFlag === "vue" ? "react" : "vue"; }, }, }; </script> <style scoped> img { width: 50px; height: 50px; } </style>
另外require和import另外的區(qū)別:
require是CommonJs/AMD規(guī)范,而import是ESMAScript6+規(guī)范。
到此這篇關(guān)于Vue動(dòng)態(tài)設(shè)置img的src不生效的問(wèn)題解決的文章就介紹到這了,更多相關(guān)Vue img src不生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element-ui?el-upload實(shí)現(xiàn)上傳文件及簡(jiǎn)單的上傳文件格式驗(yàn)證功能
前端上傳文件后,后端接受文件進(jìn)行處理后直接返回處理后的文件,前端直接再將文件下載下來(lái),下面這篇文章主要給大家介紹了關(guān)于element-ui?el-upload實(shí)現(xiàn)上傳文件及簡(jiǎn)單的上傳文件格式驗(yàn)證功能的相關(guān)資料,需要的朋友可以參考下2022-11-11vue項(xiàng)目中接入websocket時(shí)需要ip端口動(dòng)態(tài)部署問(wèn)題
這篇文章主要介紹了vue項(xiàng)目中接入websocket時(shí)需要ip端口動(dòng)態(tài)部署問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09vue中實(shí)現(xiàn)左右聯(lián)動(dòng)的效果
這篇文章主要介紹了vue中實(shí)現(xiàn)左右聯(lián)動(dòng)的效果,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-06-06vue中如何實(shí)現(xiàn)后臺(tái)管理系統(tǒng)的權(quán)限控制的方法示例
這篇文章主要介紹了vue中如何實(shí)現(xiàn)后臺(tái)管理系統(tǒng)的權(quán)限控制的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue3實(shí)現(xiàn)動(dòng)態(tài)側(cè)邊菜單欄的幾種方式簡(jiǎn)單總結(jié)
在做開(kāi)發(fā)中都會(huì)遇到的需求,每個(gè)用戶的權(quán)限是不一樣的,那他可以訪問(wèn)的頁(yè)面(路由)可以操作的菜單選項(xiàng)是不一樣的,如果由后端控制,我們前端需要去實(shí)現(xiàn)動(dòng)態(tài)路由,動(dòng)態(tài)渲染側(cè)邊菜單欄,這篇文章主要給大家介紹了關(guān)于vue3實(shí)現(xiàn)動(dòng)態(tài)側(cè)邊菜單欄的幾種方式,需要的朋友可以參考下2024-02-02