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 相关文章推荐
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
javascript JSON操作入门实例
Apr 16 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
Node.js常用工具之util模块
Mar 09 Javascript
微信小程序学习之数据处理详解
Jul 05 Javascript
Vue中计算属性computed的示例解读
Jul 26 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
Sep 06 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
Jul 09 Javascript
解决vue 打包发布去#和页面空白的问题
Sep 04 Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 Javascript
jquery实现简单自动轮播图效果
Jul 29 jQuery
JavaScript中变量提升和函数提升的详解
Aug 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
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python设置环境变量的作用整理
2020/02/17 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
什么是TCP/IP
2014/07/27 面试题
建筑个人求职信范文
2014/01/25 职场文书
北京大学自荐信范文
2014/01/28 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
犯错检讨书
2014/02/21 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
礼貌问候语大全
2015/11/10 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
利用python进行数据加载
2021/06/20 Python
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS