使用Vue.js将文件输入绑定到按钮

Rob*_*uia 1 javascript vue.js

我正在尝试使用Vue.js将输入文件绑定到按钮
具有以下内容:

<input type="file hidden>
<button>Choose</button>
Run Code Online (Sandbox Code Playgroud)

在JQuery中会是这样的:

$('button').click(function() {
    $('input[type=file]').click();
});
Run Code Online (Sandbox Code Playgroud)

所以,这是doign将按钮上的click事件绑定到输入文件,这样我就可以完全控制按钮的外观,它甚至可以是一个锚点或一个图像或任何元素来触发事件到输入.

我的问题是:如何使用Vue.js完成此操作?

谢谢!

Jos*_*ush 10

将 a 添加ref="file"到您的<input>元素,稍后使用$refs.file它来访问它。

<input ref="file" type="file">
<div @click="selectFile()">click to select a file</div>
Run Code Online (Sandbox Code Playgroud)
methods:{
  selectFile(){
    let fileInputElement = this.$refs.file;
    fileInputElement.click();

    // Do something with chosen file 
  }
}
Run Code Online (Sandbox Code Playgroud)

演示: https: //codepen.io/Jossef/pen/QWEbNGv


cra*_*bly 8

你可以这样做:

HTML:

<input id="fileUpload" type="file" hidden>
<button @click="chooseFiles()">Choose</button>
Run Code Online (Sandbox Code Playgroud)

Vue.js:

methods: {
    chooseFiles: function() {
        document.getElementById("fileUpload").click()
    },
...
Run Code Online (Sandbox Code Playgroud)

编辑 - 更新语法:

methods: {
    chooseFiles() {
        document.getElementById("fileUpload").click()
    },
...
Run Code Online (Sandbox Code Playgroud)

  • 使用组件的 $refs 并避免通过 id 查找更安全 (3认同)

小智 6

您可以使用labelhtml 标签来执行此操作,如下所示

<label for="upload-file" class="css-class">
    <input type="file" id="upload-file" hidden @change="choosFile"/>
</label>

Run Code Online (Sandbox Code Playgroud)

这样你就不再需要按钮了,你可以按照css你喜欢的方式自定义标签


小智 5

最简单的方法是将标签元素样式化,如按钮,仅 HTML。