我在项目导航栏中的nuxt:src =“ require('path / to / image'+ dynamic.variable)”中使用vue-webpack图像的动态源。如果用户通过重新获取其信息并删除其先前图像的表单替换其图像,则会得到未找到的webpack错误模块(img)(找不到新的图像):有没有办法解决此问题,例如等待webpack HRM完成吗?
我尝试在用户重新获取之前将setTimeout()设置为一秒钟,并且它可以正常工作,但是我不喜欢随机等待,我会使用Promise或同步动态,重点是webpack热重新加载不是由我的函数控制的。.我也尝试将动态路径设置为计算值:但不能解决。
我的图片标签:
<img v-if="this.$auth.user.image" class="userlogo m-2 rounded-circle" :src="require('@assets/images/users/' + this.$auth.user.image)" alt="usrimg">
我的Useredit页面方法:
...
methods: {
userEdit() {
//uploads the image
if (this.formImageFilename.name) {
let formImageData = new FormData()
formImageData.append('file', this.formImageFilename)
axios.post('/db/userimage', formImageData, { headers: { 'Content-Type': 'multipart/form-data' } })
// once it has uploaded the new image, it deletes the old one
.then(res=>{this.deleteOldImage()})
.catch(err=>{console.log(err)})
}else{
this.userUpdate() //if no new image has to be inserted, it proceeds to update the user information
}
},
deleteOldImage(){
if(this.$auth.user.image){axios.delete('/db/userimage', {data: {delimage: this.$auth.user.image}} )}
console.log(this.$auth.user.image + ' deleted')
this.userUpdate() // it has deleted the old image so it proceeds to update the user information
},
userUpdate(){
axios.put(
'/db/user', {
id: this.id,
name: this.formName,
surname: this.formSurname,
email: this.formEmail,
password: this.formPassword,
image: this.formImageFilename.name,
})
.then(() => { console.log('User updated'); this.userReload()}) // reloads the updated user information
.catch(err => {console.log(err)} )
},
userReload(){
console.log('User reloading..')
this.$auth.fetchUser()
.then(() => { console.log('User reloaded')})
.catch(err => {console.log(err)} )
},
}
...
该问题发生在“ console.log('用户重新加载..')”之后和“ console.log('用户重新加载'。);”之前,它与文件上传或服务器响应无关。我破坏了许多小功能,只是为了检查功能的进展及其异步动态,但是唯一无法管理的功能是webpack hot reload:/
我希望用户上传他们的图像,并在提交表单后在导航栏中看到他们的徽标更新。
答案 0 :(得分:1)
首先,正如有人在评论中告诉您的那样,不应将webpack hmr用于生产。
在Nuxt中,将从资源文件夹中引用的所有内容进行优化,并将其捆绑到项目包中。因此,此文件夹的理想用例是所有可以打包和优化的资产,并且它们极有可能不会发生变化,例如字体,css,背景图像,图标等。
然后,当webpack构建用于本地开发的站点或构建用于生成生产包的站点时,require仅由webpack调用一次。您遇到的问题是,在开发过程中您删除了原始文件,而webpack尝试读取它并失败。
对于用户上传的这些图像,我认为您应该使用static folder而不是使用require,而必须使用:prc来更改
:src="'/images/users/' + this.$auth.user.image"
让我知道这是否有帮助。
答案 1 :(得分:0)
好的,我可能已经解决了。
你们是否看到我的方法学将来有任何问题? 真的谢谢您的回答。我一个人学习,很高兴获得支持。