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 相关文章推荐
js里的prototype使用示例
Nov 19 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
Nov 19 Javascript
自己封装的javascript事件队列函数版
Jun 12 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
Jul 17 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
Aug 19 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
基于js中document.cookie全面解析
Sep 14 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
面包屑导航详解
Dec 07 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
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
react-router中的属性详解
2017/06/01 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python数据类型详解(二)列表
2016/05/08 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
python 对象和json互相转换方法
2018/03/22 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
分析经典Python开发工程师面试题
2019/04/08 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
如何基于python测量代码运行时间
2019/12/25 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
python def 定义函数,调用函数方式
2020/06/02 Python
努比亚手机官网:nubia
2016/10/06 全球购物
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
课外访万家心得体会
2014/09/03 职场文书
先进个人申报材料
2014/12/30 职场文书
英语辞职信怎么写
2015/02/28 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android