el-upload this.$refs怎么获取uploadFiles
时间: 2023-10-28 10:57:56 浏览: 388
您可以使用`this.$refs`来访问Vue组件的引用。通过`this.$refs.uploadFiles`,您可以获取到名为`uploadFiles`的组件,并进一步访问它的属性或方法。
假设`uploadFiles`是一个el-upload组件,您可以通过以下方式获取上传的文件列表:
```javascript
let files = this.$refs.uploadFiles.uploadFiles;
```
在上述代码中,`uploadFiles`是你在模板中给el-upload组件设置的ref属性。通过`this.$refs.uploadFiles`获取到el-upload组件的引用,并进一步访问它的`uploadFiles`属性,从而获取到上传的文件列表。
请注意,具体的属性命名可能会根据您的代码实现而有所不同,上述示例只是一种常见的命名约定。
相关问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue-upload-component Test</title> <script src="https://unpkg.com/vue"></script> <script src="https://unpkg.com/vue-upload-component"></script> </head> <body> <div id="app"> <ul> <li v-for="file in files">{{file.name}} - Error: {{file.error}}, Success: {{file.success}}</li> </ul> <file-upload ref="upload" v-model="files" post-action="/post.method" put-action="/put.method" @input-file="inputFile" @input-filter="inputFilter" > Upload file </file-upload> <button v-show="!$refs.upload || !$refs.upload.active" @click.prevent="$refs.upload.active = true" type="button">Start upload</button> <button v-show="$refs.upload && $refs.upload.active" @click.prevent="$refs.upload.active = false" type="button">Stop upload</button> </div> <script> new Vue({ el: '#app', data: function () { return { files: [] } }, components: { FileUpload: VueUploadComponent }, methods: { /** * Has changed * @param Object|undefined newFile Read only * @param Object|undefined oldFile Read only * @return undefined */ inputFile: function (newFile, oldFile) { if (newFile && oldFile && !newFile.active && oldFile.active) { // Get response data console.log('response', newFile.response) if (newFile.xhr) { // Get the response status code console.log('status', newFile.xhr.status) } } }, /** * Pretreatment * @param Object|undefined newFile Read and write * @param Object|undefined oldFile Read only * @param Function prevent Prevent changing * @return undefined */ inputFilter: function (newFile, oldFile, prevent) { if (newFile && !oldFile) { // Filter non-image file if (!/\.(jpeg|jpe|jpg|gif|png|webp)$/i.test(newFile.name)) { return prevent() } } // Create a blob field newFile.blob = '' let URL = window.URL || window.webkitURL if (URL && URL.createObjectURL) { newFile.blob = URL.createObjectURL(newFile.file) } } } }); </script> </body> </html> 将这个页面改为 vue3 的写法
好的,下面是将这个页面改为 Vue 3 的写法:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue-upload-component Test</title>
<script src="https://unpkg.com/vue@next"></script>
<script src="https://unpkg.com/vue-upload-component@3.0.0-beta.6"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="file in files">{{file.name}} - Error: {{file.error}}, Success: {{file.success}}</li>
</ul>
<file-upload
ref="upload"
v-model="files"
:post-action="'/post.method'"
:put-action="'/put.method'"
@input-file="inputFile"
@input-filter="inputFilter"
>
Upload file
</file-upload>
<button v-show="!$refs.upload || !$refs.upload.active" @click.prevent="$refs.upload.active = true" type="button">Start upload</button>
<button v-show="$refs.upload && $refs.upload.active" @click.prevent="$refs.upload.active = false" type="button">Stop upload</button>
</div>
<script>
const { createApp, ref } = Vue;
const { VueUploadComponent } = vueUploadComponent;
createApp({
setup() {
const files = ref([]);
const inputFile = (newFile, oldFile) => {
if (newFile && oldFile && !newFile.active && oldFile.active) {
// Get response data
console.log('response', newFile.response);
if (newFile.xhr) {
// Get the response status code
console.log('status', newFile.xhr.status);
}
}
};
const inputFilter = (newFile, oldFile, prevent) => {
if (newFile && !oldFile) {
// Filter non-image file
if (!/\.(jpeg|jpe|jpg|gif|png|webp)$/i.test(newFile.name)) {
return prevent();
}
}
// Create a blob field
newFile.blob = ''
let URL = window.URL || window.webkitURL
if (URL && URL.createObjectURL) {
newFile.blob = URL.createObjectURL(newFile.file)
}
};
return {
files,
inputFile,
inputFilter
}
},
components: {
'file-upload': VueUploadComponent
}
}).mount('#app');
</script>
</body>
</html>
```
主要变化如下:
- 使用 `createApp` 创建 Vue 实例;
- 使用 `ref` 创建响应式变量;
- 使用 `setup` 函数代替 `data` 属性;
- 使用 `VueUploadComponent` 替代 `vueUploadComponent`;
- 使用 `v-bind` 缩写 `:` 替代 `v-bind`;
- 使用 `v-on` 缩写 `@` 替代 `v-on`;
- 使用 `file-upload` 替代 `file-upload`。
<el-upload>上传文件前获取选择文件的顺序
<el-upload> 组件提供了 `before-upload` 属性,该属性绑定一个方法,可以在文件上传前执行一些操作,包括获取选择文件的顺序。具体实现可以参考以下代码示例:
```
<template>
<div>
<el-upload
ref="upload"
:before-upload="beforeUpload"
:auto-upload="false"
>
<el-button slot="trigger">选择文件</el-button>
</el-upload>
</div>
</template>
<script>
export default {
methods: {
beforeUpload(file) {
// 获取选择文件的顺序
const fileList = this.$refs.upload.uploadFiles;
const selectOrder = fileList.indexOf(file) + 1;
console.log(selectOrder);
return true;
}
}
};
</script>
```
在上面的示例中,我们在 `beforeUpload` 方法中获取选择文件的顺序。首先通过 `$refs` 获取到 `el-upload` 组件实例,然后通过实例的 `uploadFiles` 属性获取已选择文件的列表。接下来,我们可以通过 `indexOf` 方法获取当前选择的文件在文件列表中的位置,从而得到选择文件的顺序。因为 `before-upload` 方法需要返回一个 `Promise` 对象或者 `false`,表示是否继续上传文件,我们在方法的最后返回了 `true`。
阅读全文