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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
js动态生成Html元素实现Post操作(createElement)
Sep 14 Javascript
13个PHP函数超实用
Oct 21 Javascript
javascript定义类和类的实现实例详解
Dec 01 Javascript
JavaScript中的await/async的作用和用法
Oct 31 Javascript
React学习笔记之事件处理(二)
Jul 02 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
Sep 17 Javascript
vue实现表单录入小案例
Sep 27 Javascript
JS ES6异步解决方案
Apr 29 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如何解决无法上传大于8M的文件问题
2014/03/10 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python实现快速排序的示例(二分法思想)
2018/03/12 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
Django框架多表查询实例分析
2018/07/04 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
pytorch的batch normalize使用详解
2020/01/15 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
学生喝酒检讨书
2014/02/06 职场文书
单位授权委托书范文
2014/08/02 职场文书
同学聚会感言一句话
2015/07/30 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python