页面很简单就是一个上传按钮和一张图片
<div class="wrap"><input type="file" ref="test" @change="demo" /><img v-if="imgPath" v-bind:src="imgPath"/></div>
这里我们用图片blob转换成base64进行预览,写法如下,看似没有啥问题,但是图片就是显示不出来。
<script type="text/javascript">var vm = new Vue({el: '.wrap',data : {'imgPath': ''},methods: {demo: function() {var file = this.$refs.test.files[0];var reader = new FileReader();reader.readAsDataURL(file);reader.onload = function(e) {var str = reader.result;var urlDecoded = decodeURIComponent(str);this.imgPath = urlDecoded;}}}})</script>
我们知道FileReader对象的onload方法是异步加载的,所有我们不能在onload方法里面直接对data进行赋值。这个时候我们需要先把this赋给一个变量,然后进行再引用,方法如下
<script type="text/javascript">var vm = new Vue({el: '.wrap',data: {'imgPath': ''},methods: {demo: function() {/****先将this赋给一个变量****/var _this = this;var file = this.$refs.test.files[0];var reader = new FileReader();reader.readAsDataURL(file);reader.onload = function(e) {var str = reader.result;var urlDecoded = decodeURIComponent(str);/****对变量进行赋值****/_this.imgPath = urlDecoded;}}}})</script>
最后看一下图片预览的效果
