elementui图片在修改页面的回显

本文介绍了如何在Vue.js项目中使用mounted()钩子函数处理图片上传后回显的问题,包括从数据库获取图片地址、更新页面显示,并与其他UI库如ElementUI的图片回显功能进行了比较。
摘要由CSDN通过智能技术生成

上传图片和数据后,通常要有修改图片和数据的权限。我查阅了网上很多文章,大多讲的是上传图片时候的回显,少数讲的是修改页面的回显。

我借鉴了这部分的文章,渐渐明白有一个方法在图片回显的过程中不可或缺,这便是mounted()方法。这篇文章也算是对mounted()方法的应用做个小解。

mounted() 钩子函数是 Vue.js 生命周期中的一个阶段,在组件被挂载到 DOM 后立即执行。它在组件实例被创建并且相关的模板被编译之后调用。

mounted() 钩子函数可以用来执行一些需要在组件挂载后进行的初始化操作,比如发送异步请求、订阅事件、操作 DOM 等

依据我的理解,mounted方法在页面刷新的时候就被vue自动调用了,我们可以根据这个特性来回显图片。

 var image_url = "";//传入后端的图片地址
 const regex = /src="(.*?)"/;
 var imageurl = regex.exec(data.imageurl)[1];//用于图片回显在页面的图片地址

先在<script>标签里通过两个变量,来接收从数据库查到的图片地址,发送给数据库进行修改的新地址。

//上传图片
               new Vue({
                    el: '#app',
                    data() {
                        return {
                            control: true,//控制器
                            image_url: '', //存储对话框中展示的图片链接地址
                            dialogVisible: false, //控制对话框是否显示
                            disabled: false, //控制按钮是否禁用
                            fileList: [],//存放上传时多个图片
                            clearThumbnail: false,//清空图片
                        };
                    },
                    mounted() {
                        if (imageurl) {
                            this.fileList.push(imageurl);//存入数据库已经存在的缩略图                     
                            // 将图片地址赋值给 file_list 属性
                            this.$nextTick(() => {
                                this.$refs.upload.fileList = [{ url: imageurl }];
                            });
                            console.log(imageurl)
                        } else {
                            return false;
                        }
                        console.log(JSON.stringify(this.fileList))
                    },
                    methods: {
                        // 上传文件之前
                        beforeUpload(file) {
                            //文件大小校验
                            if (file.size > 10 * 1024 * 1024) {
                                this.$message('文件过大,请上传小于10MB的文件〜')
                                return false
                            }
                            this.control = true;
                            return true
                        },
                        //上传图片
                        uploadFiles(file) {
                            // 调用文件大小校验方法
                            if (this.beforeUpload(file.file)) {
                                this.formData = new FormData()
                                this.formData.append('file', file.file);
                                axios({
                                    method: 'post',
                                    url: '__APP__/Manager/upload_images',
                                    data: {
                                        'param1': value,
                                    }
                                })
                                // 请求接口
                                uploadFiles(this.formData).then((res) => {
                                    if (res.code == '0') {
                                        this.$message({
                                            message: '上传成功',
                                            type: 'success'
                                        })
                                        // 图片赋值
                                        this.image_url = res.data.realPath
                                    } else {
                                        // 错误信息
                                        this.$message({
                                            message: res.msg,
                                            type: 'error'
                                        })
                                    }
                                })
                            }
                        },
                        //上传成功
                        handleAvatarSuccess(response, file, fileList) {
                            console.log('上传成功的文件信息:', response, file, fileList);
                            image_url = response.data.src;
                            this.fileList.push(image_url);
                        },
                        //上传失败
                        uploadError(err, file, fileList) {
                            this.$message({
                                type: 'warning',
                                message: '上传失败'
                            })
                        },
                        //输出被删除的文件信息
                        handleRemove(file) {
                            console.log("执行了删除操作:" + this.fileList[0]);
                            let _this = this;
                            url = this.fileList[0];
                            $.post('__APP__/Manager/remove_image', { image_url: url }, function (res) {
                                console.log(res)
                                if (res != 1) {
                                    layer.msg('删除缩略图失败', { icon: 5, time: 1000 });
                                    return false; // 阻止表单提交
                                } else {
                                    image_url = "";
                                    _this.clearThumbnail = true;
                                    _this.control = false;
                                    console.log("全删")
                                }
                            }, 'json');
                            this.clearThumbnail = false;
                        },
                        //对应图片的链接地址存储到到image_url,预览图片
                        handlePictureCardPreview(file) {
                            this.image_url = this.fileList[0];
                            //this.image_url = file.url;
                            console.log(this.fileList[0])
                            if (this.control != false) {
                                this.dialogVisible = true;
                            }
                        },
                    }
                });

我的逻辑大致是,把【需要回显的图片地址】存入fileList数组里。当用户更改图片时,通过调用上传的方法、上传成功的方法,把【新的图片地址】存入fileList数组,覆盖掉原有的图片地址。

感觉elementui的图片回显比layui的图片回显更简单些,如果各位大神有什么更好的思路,可以告诉我。

完结撒花。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏木子杉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值