我在渲染 HTML 元素中的图像时遇到了一些问题。我认为对于经验丰富的前端开发人员来说,解决方案可能很简单。 我有一个 Vuetify 组件,可以让用户输入个人资料图片:
<v-form>
<v-avatar size="144">
<v-icon hidden ref="default_icon" size="144">account_circle</v-icon>
<img ref="my_img" style="display: none;" :src="my_photo.name">
<v-btn @click="$refs.my_input.click()" class="img_btn" absolute right small fab dark color="pink">
<v-icon dark>add</v-icon>
</v-btn>
<input ref="my_input" hidden type="file" accept="image/*" @change="onFileChange($refs.my_input)">
</v-avatar>
</v-form>
当元素调用 onFileChange 时,它将 HTML 元素传递给函数。
onFileChange(event) {
this.my_photo = event.files[0]
console.log(this.my_photo)
this.$refs.default_icon.style.display = "none"
this.$refs.my_img.style.display = "inline"
}
现在函数用 img 标签替换了图标。我想用用户输入的图像填充图像标签。 this.my_photo 是一个文件类型变量。 有谁知道如何做到这一点? 向大家致敬!
最佳答案
my_photo.name
实际上只是上传图像的名称。您需要将上传的图片转换为图片 src
的有效格式。
您可以通过多种方式使用 FileReader.readAsDataURL()或 URL.createObjectURL() .这些创建图像标签可以使用的源表示。
请记住,如果您计划将此图像上传到服务器,则需要保留对 event.target.files[0]
的引用。
这里是一个使用 URL.createObjectURL()
的例子。
new Vue({
el: "#app",
data: {
my_photo: '',
},
methods: {
onFileInput(event) {
const data = URL.createObjectURL(event.target.files[0]);
this.my_photo = data;
},
},
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
<input type="file" @change="onFileInput($event)">
<img :src="my_photo" alt="">
</div>
关于javascript - 如何将文件对象呈现为 HTML 元素(使用 Vue.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650586/