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 flash激活
Oct 19 Javascript
为Extjs加加速(javascript加速)
Aug 19 Javascript
浅析JavaScript基本类型与引用类型
May 28 Javascript
js鼠标悬浮出现遮罩层的方法
Jan 28 Javascript
javaScript实现滚动新闻的方法
Jul 30 Javascript
浅谈javascript函数式编程
Sep 06 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
Aug 30 Javascript
JS简单获得节点元素的方法示例
Feb 10 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 Javascript
vue实现弹幕功能
Oct 25 Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 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版(1)
2006/10/09 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
jquery cookie插件代码类
2009/05/26 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
python opencv实现证件照换底功能
2019/08/19 Python
python保留小数位的三种实现方法
2020/01/07 Python
什么是python类属性
2020/06/10 Python
用python制作个音乐下载器
2021/01/30 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
实习教师自我鉴定
2013/12/09 职场文书
艺术设计专业个人求职信范文
2013/12/11 职场文书
阅兵口号
2014/06/19 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技