javascript - 如何在 vue.js 中动态上传图片?

标签 javascript vue.js

查看代码:codepen

我想通过表单发布数据;

有一个添加图像按钮,当我第一次点击按钮并选择图像时,然后在页面中显示图像信息。当我再次点击按钮时,然后在页面中显示两个图像信息。

问题是:我无法将文件值设置为 <input type='file' />

如何做到这一点?

最佳答案

这是一个潜在的解决方案 forked from your original codepen .

我更新了 View 模型以包含一组文件。 v-for 呈现该数组并包含每个项目的隐藏文件输入(与您的代码中相同)。但是,与您的示例不同,文件输入未模型绑定(bind)到文件信息。相反,只要它的值发生变化,它就会调用 upload() 方法。 upload() 方法处理更新底层文件信息。有了它,所有 Add Image 链接需要做的就是将一个新对象推送到 files 数组,然后触发该文件的输入元素上的点击事件(在它之后被渲染)。

相关代码如下。

HTML

<ul>
  <li v-for="file in files">
    <div class="file_item">
      <div class="info">
        <strong>{{file.name}}</strong>
        <p>{{file.size | kb}}</p>
      </div>
    </div>
    <input id="file-{{$index}}" type="file" accept="image/*" @change="upload(file, $event)" style="display:none">
  </li>
</ul>
<div class="value_btn">
  <a href="#" v-on:click="addImage" class="add">
    <span>Add Image</span>
  </a>
</div>

Javascript

var vm = new Vue({
  el: "#item",
  data: {
    files : []       
  },
  methods: {
    addImage: function(){
      this.files.push({ name: "", size: 0})
        this.$nextTick(function () {
            var inputId = "file-" + (this.files.length-1);
            document.getElementById(inputId).click();
        });  
    },
    upload: function(file, e){
      var f = e.target.files[0];
      file.name = f.name;
      file.size = f.size;
    }
  }
})

关于javascript - 如何在 vue.js 中动态上传图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781201/

相关文章:

javascript - vuejs无法在导航栏中获取vuex值

javascript - 如何使用 vue.js 更改页面上的 html?

javascript - Vue indexOf vs vanilla javascript 用于从数组中选择对象

javascript - Vuejs - 加载API时无法读取未定义的属性 'location'

javascript - 用于计算大数的自定义缓动方程

javascript - Telegram Bot - 如何将 InlineKeyboardButton 与 CallbackQuery 绑定(bind)

javascript - 如何通过特定字段过滤 JSON 数据?

javascript - JavaScript中如何获取key对应的值

javascript - 删除所有其他逗号并用方括号括起来

javascript - Vue.js 组件数据依赖于其他组件数据