Vik*_*sIT 2 javascript forms vue.js vuejs2
我已经制作了一个 vue 表单,但无法使用我的表单来预览他们想要提交到表单的图像。
刷新页面后,我可以看到图像,但上传时预览链接已损坏。有一个选项可以删除图像,该选项有效,但现在的目标是显示图像预览。
<div class="image-block">
<div @click="selectImage('initial-image')">
<img class="img-icon"
v-if="imageName === null">
<div :class="{'error' : errors.length > 0}" class="text-center"
v-if="imageName === null">
Select an image to upload
</div>
</div>
<div class="image-preview" v-if="imageName !== null">
<div class="remove-image" @click="removeImage"><i
class="fa fa-remove"></i>
</div>
<img v-bind:src="'/images/json-ld/images/' + imageName" class="growth-image"
@click="selectImage('initial-image')">
</div>
</div>
<validation-provider name="image" v-slot="{ validate, errors }">
<input type="file" @change="validate" name="image" accept="image/*"
class="hidden"
v-on:change="showFilePreview">
<span class="validation-error form-span">{{ errors[0] }}</span>
</validation-provider>
Run Code Online (Sandbox Code Playgroud)
方法:
removeImage() {
this.imageName = null;
},
selectImage(id) {
document.getElementById(id).click();
},
showFilePreview(e) {
let files = e.target.files || e.dataTransfer.files;
if (!files.length) return;
this.createImage(files[0]);
},
createImage(file) {
let reader = new FileReader();
let vm = this;
reader.onload = (e) => {
vm.image = e.target.result;
};
reader.readAsDataURL(file);
},
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我认为你可以替换:
<img v-bind:src="'/images/json-ld/images/' + imageName" .. />
Run Code Online (Sandbox Code Playgroud)
和
<img v-bind:src="image" .. />
// Or, using bind shortcut
<img :src="image" .. />
Run Code Online (Sandbox Code Playgroud)
然后预览应该可以正常工作。
演示 #1
<img v-bind:src="'/images/json-ld/images/' + imageName" .. />
Run Code Online (Sandbox Code Playgroud)
<img v-bind:src="image" .. />
// Or, using bind shortcut
<img :src="image" .. />
Run Code Online (Sandbox Code Playgroud)
new Vue({
el: '#app',
data() {
return {
image: null,
}
},
methods: {
showFilePreview(e) {
let files = e.target.files || e.dataTransfer.files;
if (!files.length) return;
this.createImage(files[0]);
},
createImage(file) {
let reader = new FileReader();
let vm = this;
reader.onload = (e) => {
vm.image = e.target.result;
};
reader.readAsDataURL(file);
}
}
})Run Code Online (Sandbox Code Playgroud)
this.createImage(files[0])另外,您可以通过删除并使用来简化代码URL.createObjectURL()来获取上传的图像网址:
演示 #2
#app { padding: 10px; }
#preview img { max-width: 100%; max-height: 150px; margin-top:10px;}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">
<input type="file" @change="showFilePreview" />
<div id="preview">
<img v-if="image" :src="image" />
</div>
</div>Run Code Online (Sandbox Code Playgroud)
new Vue({
el: '#app',
data() {
return {
image: null,
}
},
methods: {
showFilePreview(e) {
let files = e.target.files || e.dataTransfer.files;
if (!files.length) return;
this.image = URL.createObjectURL(files[0]);
}
}
})Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |