使用Vue 自定义文件选择器组件的实例代码


Posted in Javascript onMarch 04, 2020

本文 GitHub  https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。

文件选择元素是web上最难看的 input 类型之一。它们在每个浏览器中实现的方式不同,而且通常非常难看。这里有一个解决办法,就是把它封装成一个组件。

安装

如果你尚未设置项目,可以使用 vue-cliwebpack-simple 模板启动一个新项目。

$ npm install -g vue-cli
$ vue init webpack-simple ./file-upload # Follow the prompts.
$ cd ./file-upload
$ npm install # or yarn

组件模板和样式

该组件主要做的就是将 input type=”file” 元素包装在标签中,并在其中显示其他内容,这种思路虽然简单,便却很实用。

// FileSelect.vue

<template>
 <label class="file-select">
 <div class="select-button">
  <span v-if="value">Selected File: {{value.name}}</span>
  <span v-else>Select File</span>
 </div>
 <input type="file" @change="handleFileChange"/>
 </label>
</template>

现在来加一些样式美化一下:

// FileSelect.vue
...
<style scoped>
.file-select > .select-button {
 padding: 1rem;

 color: white;
 background-color: #2EA169;

 border-radius: .3rem;

 text-align: center;
 font-weight: bold;
}

/* Don't forget to hide the original file input! */
.file-select > input[type="file"] {
 display: none;
}
</style>

封装逻辑

对于浏览器来说, file 是一种非常特殊的类型,所以有一些特殊的规则使它们有时很难处理。(更多信息请 点击这里 )。因此,我们可以借助 v-model 来封装,让该组件像普通表单元素一样。我们知道 v

我们知道, Vue 是单项数据流, v-model 只是语法糖而已,如下所示:

<input v-model="sth" />
// 上面等价于下面
<input v-bind:value="sth" v-on:input="sth = $event.target.value" />

知道了 v-model 的原理,我们来实现一下 FileSelect 组件的逻辑:

// FileSelect.vue 
<script>
export default {
 props: {
 // 这里接受一个 value 因为 v-model 会给组件传递一个 value 属性
 value: File
 },

 methods: {
 handleFileChange(e) {
  // 同样触发一个 input 来配合 v-model 的使用
  this.$emit('input', e.target.files[0])
 }
 }
}
</script>

用法

现在,我们来用下 FileSelect 组件

// App.vue
<template>
 <div>
 <p>选择文件: <file-select v-model="file"></file-select></p>
 <p v-if="file">{{file.name}}</p>
 </div>
</template>

<script>
import FileSelect from './FileSelect.vue'

export default {
 components: {
 FileSelect
 },

 data() {
 return {
  file: null
 }
 }
}
</script>

总结

虽然该事例很简单也很基础,但我们可以在这之上完善更强大的功能,在开发中,单向数据流虽然简单且易读,但在一些实际的开发中,Vue 的自定义组件,使用双向绑定也就是 v-model 的方式,会更加灵活实用,

我们需要了解及掌握这种思路,希望对大家有所帮助。

下节会在公众号发布对应的视频教程,敬请关注。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具Fundebug 。

到此这篇关于使用Vue 自定义文件选择器组件的文章就介绍到这了,更多相关vue自定义选择器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery each()源代码
Feb 14 Javascript
JavaScript中的排序算法代码
Feb 22 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
javascript数组操作总结和属性、方法介绍
Apr 05 Javascript
JS实现让访问者自助选择网页文字颜色的方法
Feb 24 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
AngularJS 让人爱不释手的八种功能
Mar 23 Javascript
Angular4开发解决跨域问题详解
Aug 28 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
Sep 10 Javascript
jQuery插件simplePagination的使用方法示例
Apr 28 jQuery
JS中==、===你分清楚了吗
Mar 04 #Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
Mar 04 #Javascript
通过实例了解Javascript柯里化流程
Mar 03 #Javascript
微信小程序getLocation 需要在app.json中声明permission字段
Mar 03 #Javascript
Javascript作用域和作用域链原理解析
Mar 03 #Javascript
JS数组方法reduce的用法实例分析
Mar 03 #Javascript
Javascript模拟实现new原理解析
Mar 03 #Javascript
You might like
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
限制文本字节数js代码
2007/03/06 Javascript
List Installed Hot Fixes
2007/06/12 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
python matlibplot绘制3D图形
2018/07/02 Python
python使用tornado实现简单爬虫
2018/07/28 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
学生党员一帮一活动总结
2014/07/08 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
委托书格式范文
2015/01/28 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
春秋淹城导游词
2015/02/11 职场文书
超市员工管理制度
2015/08/06 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书