javascript - Vue.js如何在更新前显示图像预览

标签 javascript vue.js ecmascript-6

嗨,我有我的自定义组件,我正在其中加载图像。我需要在选择图像之后和将其上传到服务器之前显示该图像。请问如何做到这一点?我尝试在 img 标签上使用 v-on:change 效果,但它不起作用。我的计划是使用 test() 函数来进行图像预览。

<template>
    <div id="insert-component">
        <div id="insert-new" >
            <h2 class="text-md-left">New Category</h2>
            <div class="mt-2 text-left">
                <a href="#" id="img-button" class=" d-flex flex-wrap" v-on:click.stop="loadImage()">
                    <img src="/storage/images/no_image.png" alt="logo" v:on-change="test()">
                    <input type="file" class="d-none" id="load-category-image"  v-on:input="handleFileSelected">
                    <button class="btn btn-dark btn-block" >Pridať obrázok</button>
                </a>
                <small class="text-danger d-none error">Súbor musí byť png, jpg alebo jpeg</small>
            </div>
        </div>
        <button class="btn btn-success btn-block my-2" v-on:click="submit($event)">Pridať kategóriu</button>
    </div>
</template>
<script>
    export default {
        name: "InsertComponent",
        props: [ 'updateTableData' ],
        data: function () {
            return {
                category_name: "",
                category_description: "",
                category_img:"/storage/images/no_image.png",
                file:null
            }
        },
        methods: {
            test(){
              alert("test");
            },
            loadImage(){
                document.getElementById('load-category-image').click();
            },
            handleFileSelected(event) {
                const acceptedImageTypes = ['image/jpg', 'image/jpeg', 'image/png'];
                let loadedFile = document.getElementById('load-category-image').files;
                if(acceptedImageTypes.includes(loadedFile[0]['type']))
                {
                    this.category_img="/storage/images/"+loadedFile.name;
                    this.file=loadedFile;
                }
                else{
                    let $errorsElements = document.getElementsByClassName('error');
                    for (let item of $errorsElements) {
                        item.classList.remove('d-none');
                    };
                    category_img="/storage/images/no_image.png";
                }
            },
        },
    }
</script>

最佳答案

您可以使用URL.createObjectURL(files[0])生成url。

codepen - https://codepen.io/anon/pen/XGYoyr

关于javascript - Vue.js如何在更新前显示图像预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60738816/

相关文章:

JavaScript 错误 : 'window.top.document.getElementById(...)' is null or not an object

javascript - 递归/嵌套函数 - 参数范围

javascript - 在 ES6 中使用对象或数组解构赋值时如何混合使用 const 和 let?

javascript - 如何使用 Stripe 的 JavaScript API 验证优惠券?

javascript - 如何通过 Javascript 转换 UTC 日期?

c# - Vue 在 axios post 请求中的对象中发送空参数

vue.js - 如何在vuejs中检测ctrl + z和ctrl + y?

javascript - 是什么导致 Vue props 等于 DOM 中的 [object Object]?

javascript - 使用 += 获取总和在这里不起作用。为什么?

javascript - 如何使用javascript以优化方式将json一个结构解析为另一种结构?