【问题标题】:V-model directives don't support input type="file"V-model 指令不支持 input type="file"
【发布时间】:2021-02-12 21:26:22
【问题描述】:

我正在尝试更新我的数据库中的用户配置文件数据,但我卡在用户配置文件图像上。我不能使用 v-model 进行绑定,并且使用 v-on:change 它不起作用。到目前为止,这是我的代码,它工作正常,唯一的问题是绑定。

<template>
-----
          <div v-if="!image">
            <h2>Select an image</h2>
            <input type="file" @change="onFileChange" /> ---->here I would like to use the v-model but can't use it on input type="file"
          </div>
          <div v-else>
            <img :src="image" />
            <button @click="removeImage">Remove image</button>
          </div>
          <input
            type="text"
            placeholder="Userame"
            v-model="user.username"
            required
          />
          <button
            type="button"
            class="btn btn-outline-warning waves-effect"
            aria-label="Left Align"
            @click.prevent="updateProfile(user)"
          >
            Update profile
          </button>
       ---
</template>

<script>
export default {
  data: function () {
    return {
      user: {},
       image: ''
    };
  },

  methods: {
    onFileChange(e) {
      var files = e.target.files || e.dataTransfer.files;
      if (!files.length)
        return;
      this.createImage(files[0]);
    },
    createImage(file) {
      var image = new Image();
      var reader = new FileReader();
      var vm = this;

      reader.onload = (e) => {
        vm.image = e.target.result;
      };
      reader.readAsDataURL(file);
      console.log(file.name);
    },
    removeImage: function (e) {
      this.image = '';
  },
    updateProfile() {
      store
        .dispatch("updateProfile", {
          username: this.user.username,
          email: this.user.email,
          profileImage: this.file ------>I need it for the binding here

</script>

【问题讨论】:

    标签: javascript html vue.js bind v-model


    【解决方案1】:

    您忘记将文件绑定到this.file。将您的 onFileChange 方法更新为此??,它会起作用。

    注意:v-model 仅适用于使用value 绑定的input,其中输入类型文件不使用input value,将input type file 与v-model 一起使用是没有意义的

    onFileChange(e) {
          var files = e.target.files || e.dataTransfer.files;
          if (!files.length) return;
          this.file = files[0]
          this.createImage(this.file);
        },
    

    【讨论】:

    • 不幸的是,即使我更改了onFileChange 方法,当我console.log(this.user) 时,唯一的空字段仍然是profileImage: " "
    • 您没有将文件更新为user,而是将file 更新为数据属性。检查一次
    • 您要更新什么this.file 或this.user.profileImage ?
    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多