vue实现密码显示与隐藏按钮的自定义组件功能


Posted in Javascript onApril 23, 2019

思路

实现该组件有两个思路,一个使用v-model进行双向绑定,一个是使用prop的.sync修饰符、父子组件通信。

1.v-model形式

v-model的实现需要在自定义组件中自定义一个inputvalue值,因为vue中的父子组件传递机制问题,在组件中直接修改props注入的key字段时,vue会给出错误。子组件中定义inputvalue字段,用于子组件中input元素的值的双向绑定,子组件中的input数据绑定可以使用v-model,也可以使用实现v-model的原理语法糖,下面两种方式都可作为子组件中的数据绑定。

<input type="password" v-model="inputvalue"/>
<input type="password" :value="inputvalue" @input="inputvalue=$event.target.value"/>

关于v-model的实现可查看其他关于v-model的实现文章。

最后实现的子组件文件如下,这里的显示隐藏的点击使用的是文字,实际使用时可使用对应的icon字体图标,并设定一定的样式。

<template>
<div>
  <input :type='show?"text":"password"' :value="inputvalue" 
@input="inputvalue=$event.target.value" :placeholder='placeholder'/>
  <i :title="show?'隐藏密码':'显示密码'" @click="changePass" 
style="cursor:pointer;">{{show?'隐藏':'显示'}}</i>
</div>
</template>
 
<script>
export default {
  props: {
    value: {
      default: "",
      type: String
    },
    placeholder: {
      default: "",
      type: String
    },
  },
  data(){
    return{
      inputvalue:"",
      show:false,//密码显示或隐藏的Boolean,默认false,密码不显示
    }
  },
  watch:{
    inputvalue(news,olds){
      this.$emit("input",news);
    }
  },
  mounted(){
    this.inputvalue=this.value;
  },
  methods:{
    changePass(){
      this.show=!this.show;
    }
  }
}
</script>
<style>
</style>

父组件引用方式如下

<input-password v-model="value"></input-password>

因为这里实现的v-model的绑定方式,而v-model的实现就是监听的input事件,则当inputvalue改变时,则向父组件发出input事件,父组件使用v-model监听input事件,修改父组件中的value值,此处实现了双向绑定,同时在显示和隐藏的i标签上绑定事件,点击i标签时改变show的值,通过判断show的值动态改变input的type,实现密码的显示和隐藏。

2。.sync修饰符

.sync修饰符的实现与v-model的实现方式相同,唯一不同的是watch监听inputvalue变化时向父组件发出的事件修改为 "update:value" ,修改后inputvalue的监听函数如下

inputvalue(news,olds){
      this.$emit("update:value",news);
    },

父组件引用方式

<input-password :value.sync="value"></input-password>

写到最后

其实两种方式的实现最主要需要的还是父子组件之间的传值,使用emit,vuex,或自定义仓库等都可实现父子组件中的传值,监听inputvalue修改时可以同时使用两种emit发送,可同时支持两种方式。

以上所述是小编给大家介绍的vue实现密码显示与隐藏按钮的自定义组件功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
分享27款非常棒的jQuery 表单插件
Mar 28 Javascript
jquery实现商品拖动选择效果代码(自写)
May 28 Javascript
jquery索引在使用中的一些困惑
Oct 24 Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 Javascript
关于img的href和src取变量及赋值的方法
Apr 28 Javascript
jQuery元素选择器用法实例
Dec 23 Javascript
JavaScript类继承及实例化的方法
Jul 25 Javascript
javascript实现无缝上下滚动特效
Dec 16 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
详解ES7 Decorator 入门解析
Feb 18 Javascript
vue组件系列之TagsInput详解
May 14 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
Apr 23 #Javascript
vue缓存的keepalive页面刷新数据的方法
Apr 23 #Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 #Javascript
Vue 之孙组件向爷组件通信的实现
Apr 23 #Javascript
Vue infinite update loop的问题解决
Apr 23 #Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 #Javascript
仿ElementUI实现一个Form表单的实现代码
Apr 23 #Javascript
You might like
php 上传功能实例代码
2010/04/13 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
优化javascript的执行速度
2010/01/23 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
python实现的简单抽奖系统实例
2015/05/22 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
pycharm的python_stubs问题
2020/04/08 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
.NET remoting中对象激活的两种方式
2015/06/08 面试题
傲盾软件面试题
2015/08/17 面试题
思想品德自我鉴定
2013/10/12 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
史上最牛辞职信
2015/05/13 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL