如何在vue.js 2中将链接作为文件输入?

时间:2017-06-22 12:53:16

标签: file-upload vue.js vuejs2 vue-component

我的vue组件是这样的:

<template>
    ...
        <a href="javascript:;" class="thumbs"
           :title="upload">
            <span class="fa fa-plus fa-2x"></span>
        </a> 
    ...
</template>
<script>
    export default {
        props: ['...'],
        data() {
              return {
                    ...
              };
        },
        computed:{
            ...
        }
    }
</script>

我想要点击一个链接,它可以上传文件

在javascript中,我知道。如果是这样的javascript:How to make a link act as a file input

但我怎么能在vue.js 2中做到这一点?

2 个答案:

答案 0 :(得分:2)

我相信存在一个小小的误解:Vue.js 2 仍然是javascript 。它的目标与它的幻想components不同 - 它应该增强JS,而不是用一个不同的结构替换它。

@DavidHallbergJönsson的回答在Vue.js 2中完美无缺。如果你想在Vue的组件结构中特别想要它:

heroku run lein repl --size=standard-2x

如果您想在链接中使用编程方式,那么some browsers don't allow you to trigger click events on input type="file" elements就不会那么容易了。你最好的选择就是这样。

(另外,从技术上讲,你仍然可以在vue中使用jQuery,因此如果你想要它,那个链接中的代码仍然可以工作。)

如果您想知道如何处理上传文件,已预先制作many tutorialssome components

答案 1 :(得分:0)

您实际上只能使用CSS as explained here

执行此操作

示例(来自上面的链接):

.fileContainer {
    overflow: hidden;
    position: relative;
}

.fileContainer [type=file] {
    cursor: inherit;
    display: block;
    font-size: 999px;
    filter: alpha(opacity=0);
    min-height: 100%;
    min-width: 100%;
    opacity: 0;
    position: absolute;
    right: 0;
    text-align: right;
    top: 0;
}

/* Example stylistic flourishes */

.fileContainer {
    background: red;
    border-radius: .5em;
    float: left;
    padding: .5em;
}

.fileContainer [type=file] {
    cursor: pointer;
}
}
<p>So various methods prevent file upload inputs from being styled conveniently. But that needn't be the case!</p>
<label class="fileContainer">
    Click here to trigger the file uploader!
    <input type="file"/>
</label>