需求:在选择文件上传之前,需要进行一个提示,在点击确认之后,再弹出文件资源管理器。
注意点:
1、Vue3中,如何获取在for循环中设置的ref对象。
for循环中,如果给每一个元素都绑定一个ref对象,显然不现实。可以通过改变ref的绑定方式(:ref=“el=>{}”),用一个数组来接收所有的ref元素,然后在使用时通过index获取对应的ref对象。
参考文档:https://www.cnblogs.com/we-smile/p/16313550.html
2、点击替换按钮,先弹出提示框点击确认后再弹出文件资源管理器。
在upload组件中设置一个替换按钮,让他隐藏,在upload组件外面设置一个替换按钮并设置一个点击事件handleReplace,在handleReplace中设置弹窗的显示,在弹窗中点击确认的handleOK方法中通过ref对象控制upload中替换按钮的点击事件的发生,从而弹出文件资源管理器。
主要代码:
// A code block
<div v-for="(file, index) in fileListArr" :key="index">
<div class="imgList">
<a>
<div class="mask">
<Upload
action="文件保存的地址"
:accept="type"
v-model:file-list="fileList2"
@change="handleChangeFile"
>
<RetweetOutlined
:ref="
(el) => {
iconRefs[index] = el;
}
"
class="icon-replace"
@click="handleReplace1(file)"
v-show="false"
/>
</Upload>
<RetweetOutlined class="icon-replace" @click="handleReplace(file, index)" />
</div>
</a>
</div>
<a-modal
:visible="visible"
@cancel="cancel"
@ok="handleOK(index)"
title="确认要替换该素材吗?"
style="width: 350px"
>
<p style="border: none; font-size: 15px; text-align: center"
>确认吗,真的确认吗???</p
>
</a-modal>
</div>
// 主要功能代码
const iconRefs = ref([]); //
const visible = ref(false); //控制modal组件的显示和隐藏
// 提示框点击确认触发事件
const handleOK = (index) => {
iconRefs.value[index].click();
visible.value = false;
};
//点击替换按钮
const handleReplace = (file, index) => {
visible.value = true; //弹出提示框
};
本来我想使用如下方法展示弹窗,但是本地运行没问题,部署到线上后,点击弹窗的确认和取消按钮弹窗不会关闭,目前还不知道原因。
Modal.confirm({
title: '确认要替换该素材吗?',
content: '确认吗,真的确认吗???',
okText: '确认',
cancelText: '取消',
onOk() {
console.log('ok');
iconRefs.value[index].click();
},
onCancel() {
console.log('cancel');
},
});