首页 > 语言 > JavaScript > 正文

vue实现密码显示与隐藏按钮的自定义组件功能

2024-05-06 15:40:15
字体:
来源:转载
供稿:网友

思路

实现该组件有两个思路,一个使用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发送,可同时支持两种方式。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选