禁用el-upload组件不生效
时间: 2023-09-03 12:10:36 浏览: 189
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
如果禁用 `el-upload` 组件不生效,可能是因为 `el-upload` 组件内部的事件监听器或触发器仍在运行。你可以试着在禁用组件时,手动解除组件内部的事件监听器或触发器。以下是一个示例代码:
```vue
<template>
<div>
<el-upload
:disabled="isDisabled"
:before-upload="beforeUpload"
:on-success="onSuccess"
:on-error="onError"
>
<el-button slot="trigger">上传文件</el-button>
</el-upload>
</div>
</template>
<script>
export default {
data() {
return {
isDisabled: false,
};
},
methods: {
beforeUpload(file) {
if (this.isDisabled) {
file.abort(); // 取消上传
return false;
}
},
onSuccess(response, file, fileList) {
console.log(response, file, fileList);
},
onError(err, file, fileList) {
console.error(err, file, fileList);
},
},
watch: {
isDisabled(newVal) {
const uploadEl = this.$refs.upload.$refs.input; // 获取上传组件的 input 元素
if (newVal) {
uploadEl.removeEventListener("click", this.handleClick); // 解除点击事件监听器
uploadEl.disabled = true; // 禁用 input 元素
} else {
uploadEl.addEventListener("click", this.handleClick); // 添加点击事件监听器
uploadEl.disabled = false; // 启用 input 元素
}
},
},
mounted() {
this.handleClick = (event) => {
if (this.isDisabled) {
event.stopPropagation(); // 阻止事件冒泡
event.preventDefault(); // 阻止默认行为
}
};
const uploadEl = this.$refs.upload.$refs.input; // 获取上传组件的 input 元素
uploadEl.addEventListener("click", this.handleClick); // 添加点击事件监听器
},
};
</script>
```
在这个示例代码中,我们在 `el-upload` 组件的 `before-upload` 事件中判断组件是否被禁用,如果被禁用,则取消上传并返回 `false`。然后,在 `watch` 中监听 `isDisabled` 的变化,如果 `isDisabled` 为 `true`,则解除上传组件的 input 元素的点击事件监听器,并禁用 input 元素;如果 `isDisabled` 为 `false`,则添加点击事件监听器,并启用 input 元素。这样就可以确保组件被禁用时,内部的事件监听器或触发器也同时被禁用了。
阅读全文