Invoke the upload dialog from Vue.js component
Posted on October 25, 2019 in
2 min read
In my previous tutorial I've outlined how to build a Vue.js component to allow users to drag&drop files on the browser window.
Now, I want to add a little feature more to those components, the possibility to invoke the upload dialog box by clicking or tapping some link.
The input selector
There is only one way to show the upload dialog in the browser. We need an <input type="file" />
tag which produces a default form button, not really sexy from UI point of view.
But we can hide it and use a placeholder instead, that can be styled as we prefer with CSS:
<label for="uploadmyfile">
<p>Open the Upload dialog</p>
</label>
<input type="file" id="uploadmyfile" />
<style>
#uploadmyfile{
display:none;
}
p{
color:red;
}
</style>
The JS add-on
The input selector is responsible to open the dialog window and call a function once the user choose something. Here a minimal component in Vue.js that does the job:
<template>
<div>
<label for="uploadmyfile">
<p>Open the Upload dialog</p>
</label>
<input type="file" id="uploadmyfile" @change="requestUploadFile" />
</div>
</template>
<script>
export default {
methods:{
requestUploadFile(){
var src = this.$el.querySelector('#uploadmyfile')
console.log(src.files)
}
}
}
</script>
The requestUploadFile
method is called once the users choose some files from their computer. The function then can read the input
element to get a FileList
object containing the list of File
choosen by the users.
In the previous components there was already a method responsible to read the images from a FileList
object. We just need to integrate the two together.
The complete component
Here the result combining both the drag&drop feature with the upload dialog box function:
You can review the complete source code from its repository.