el-input 重写带图标密码框(点击小眼睛显示、隐藏密码)

需求:

密码框在编辑输入状态下 和 disabled 禁用状态下 都可以展示明文和密文,官方组件在disabled 下不支持,需重写。

效果:
代码:
复制代码
<template>
  <el-input
    id="password"
    placeholder="请输入密码"
    v-model="password"
    autocomplete="new-password"
    :type="showPassword ? 'text' : 'password'"
    :disabled="true"
  >
    <template #suffix>
      <i :class="showPassword ? 'icon icon-view' : 'icon icon-view-off'" @click="showPassword = !showPassword"></i>
    </template>
  </el-input>
</template>
 
<script>
export default {
  data() {
    return {
      password: '', // 绑定的密码值
      showPassword: false, // 控制密码是否显示为明文
    };
  },
};
</script>
<style lang="less" scoped>
  i.icon{
    display: inline-block;
    height: 20px;
    width: 20px;
    margin-left: 6px;
    position: relative;
    top: 3px;
    &:hover {
      cursor: pointer;
    }
    background: url('../../assets/image/view.png') center 2px no-repeat;
    background-size: contain;
    &.icon-view{
      background-image: url('../../assets/image/view.png');
    }
    &.icon-view-off{
      background-image: url('../../assets/image/viewoff.png');
    }
  }
</style>
扩展:
复制代码
    @focus="showPassword = true"
    @blur="showPassword = false"
解释:
  1. v-model : 绑定输入框的值到password

  2. show-password : 这个属性在Element UI的el-input组件中已经存在,用于自动处理显示和隐藏密码的功能,但如果想自定义图标,可以忽略这个属性。

  3. @focus 和 @blur : 这两个事件处理器用来在输入框获得焦点和失去焦点时改变showPassword的状态。这有助于在用户点击小眼睛图标之前保持当前的显示状态。

  4. :type : 根据showPassword的值来切换输入框的类型,如果是文本则显示明文,如果是密码则显示为密文。

  5. template #suffix : 这是Element UI的插槽语法,用于在输入框后添加自定义内容(如小眼睛图标)。点击这个图标会切换showPassword的值。

  6. i标签的class : 根据showPassword的值切换图标,使用Element UI的内置图标类(如el-icon-viewel-icon-view-off)。确保项目中已经正确引入了这些图标。如果没有,可以自定义图标或使用其他库提供的图标。

相关推荐
仙人球部落7 分钟前
-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)
开发语言·javascript·python
2601_9637713733 分钟前
Hardening Enterprise WordPress Sites Against REST API Leaks and Bad Headers
前端·windows·word·php
蓝银草同学36 分钟前
Stream 实战:博客列表排序、过滤与分页(AI 辅助学习 Java 8)
java·前端·后端
2601_9571909044 分钟前
飞行影院安装施工指南:场地、动感系统与影片内容配套
大数据·前端·人工智能
爱折腾的小黑牛1 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
sunfdf1 小时前
Next.js 新手从零部署到首跑实战指南
开发语言·javascript·ecmascript
YHHLAI1 小时前
Agent 智能体开发实战 · 第六课:MCP 协议 —— 让 Agent 跨进程调用工具
前端·人工智能
SmartBoyW1 小时前
前端死磕:一文彻底搞懂 JS 事件循环 (Event Loop) 与宏微任务
前端·javascript
爱勇宝2 小时前
3位工程师靠“删AI代码”创业,一周收费1万美元:以后最贵的能力,可能不是写代码
前端·后端·架构
Curvatureflight2 小时前
客户端日志上报怎么设计?让线上问题不再只靠用户截图
前端·系统架构