【发布时间】:2018-03-31 18:29:45
【问题描述】:
目前我正在使用 Vuejs2 生成用于图像上传的列表,在选择图像文件后会显示预览图像,这是我用 Vuejs2 用 codepan 编写的代码: https://codepen.io/anon/pen/MELZKe
<div v-for="(image, index) in images" :key="index">
<div class="image-upload">
<label v-bind:for="'cover-upload-' + index">
<img src="http://via.placeholder.com/100x100" width="100" class="preview-img"/>
</label>
<input v-bind:id="'cover-upload-' + index" v-bind:name="'slides[' + index + ']'" type="file" class="upload-preview" style="display:none">
</div>
<button type="button"
@click.prevent="removeImage(index)"
v-show="image_quantity > 1">
Remove
</button>
</div>
我创建了 2 个文件上传图片,上传第一张图片(将预览您的图片),删除第一张预览图片,但它会删除最后一张预览图片而不是第一个。
但是,几乎相同的编码但使用 Vuejs1,它将删除第一个预览图像而不是最后一个。这是使用 Vuejs1 的 codepen: https://codepen.io/anon/pen/VMgqbG
我不知道如何为 Vuejs2 编写这种情况,或者我必须坚持使用 Vuejs1?
谢谢。
【问题讨论】:
-
我看到的问题是图像源没有保存在任何变量中,它存储在您的
readURL函数的 dom 对象中,您需要将该信息移动到您的数组中目前只是一堆与 dom 无关的{name=""}元素。 -
另外,您可以在 >= 2.2 中使用
Vue.delete(this.images, index),添加了一些漂亮的助手。 -
问题是我无法将 v-model 绑定到 img 元素中,因为它不是输入的。
-
Vue.delete 与 splice(index, 1); 的结果完全相同;