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 相关文章推荐
Jquery 实现Tab效果 思路是js思路
Mar 02 Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 Javascript
详解JavaScript UTC时间转换方法
Jan 07 Javascript
Javascript动画效果(2)
Oct 11 Javascript
webpack入门+react环境配置
Feb 08 Javascript
基于react框架使用的一些细节要点的思考
May 31 Javascript
axios 处理 302 状态码的解决方法
Apr 10 Javascript
React 组件间的通信示例
Jun 14 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
Layui实现带查询条件的分页
Jul 27 Javascript
浅谈Three.js截图并下载的大坑
Nov 01 Javascript
JavaScript算法学习之冒泡排序和选择排序
Nov 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
如何去掉文章里的 html 语法
2006/10/09 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
解放web程序员的输入验证
2006/10/06 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
2017/09/15 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
python模拟斗地主发牌
2020/04/22 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
挂职个人工作总结
2015/03/05 职场文书
停电通知范文
2015/04/16 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
再谈python_tkinter弹出对话框创建
2022/03/20 Python