当前位置: 首页 > news >正文

Vue3 小功能记录:密码的显示与隐藏功能

Vue3 小功能记录:密码的显示与隐藏功能


步骤一:创建组件

src/components 目录下创建一个新的组件文件 PasswordToggle.vue

<template><div class="password-toggle"><input :type="inputType" v-model="password" placeholder="请输入密码" /><button @click="togglePasswordVisibility">{{ buttonLabel }}</button></div>
</template><script>
import { ref, computed } from 'vue';export default {setup() {// 定义响应式数据const password = ref('');const isPasswordVisible = ref(false);// 计算属性:动态切换输入框类型const inputType = computed(() => (isPasswordVisible.value ? 'text' : 'password'));// 计算属性:动态切换按钮文本const buttonLabel = computed(() => (isPasswordVisible.value ? '隐藏' : '显示'));// 方法:切换密码显示状态const togglePasswordVisibility = () => {isPasswordVisible.value = !isPasswordVisible.value;};// 返回数据和方法供模板使用return {password,isPasswordVisible,inputType,buttonLabel,togglePasswordVisibility,};},
};
</script><style scoped>
.password-toggle {display: flex;align-items: center;
}input {margin-right: 10px;padding: 5px;
}button {padding: 5px 10px;cursor: pointer;
}
</style>

步骤二:在主应用中使用组件

打开 src/App.vue 文件,将 PasswordToggle 组件引入并使用:

<template><div id="app"><h1>密码显示与隐藏示例</h1><PasswordToggle /></div>
</template><script>
import PasswordToggle from './components/PasswordToggle.vue';export default {components: {PasswordToggle,},
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

代码解析
  1. 组合式 API
    • 使用 ref 定义响应式数据 passwordisPasswordVisible
    • 使用 computed 定义计算属性 inputTypebuttonLabel,根据 isPasswordVisible 的值动态返回输入框类型和按钮文本。
  2. 模板部分
    • input 元素的 type 属性绑定了 inputType 计算属性,根据 isPasswordVisible 的值动态切换为 'text''password'
    • button 元素的文本绑定了 buttonLabel 计算属性,根据 isPasswordVisible 的值动态显示 '显示''隐藏'
    • button 元素的 @click 事件绑定了 togglePasswordVisibility 方法,用于切换 isPasswordVisible 的值。
  3. 方法部分
    • togglePasswordVisibility 是一个简单的方法,用于切换 isPasswordVisible 的值。

相关文章:

  • 实时数仓体系概览与架构演进
  • LeetCode-47. 全排列 II
  • Kafka集群
  • Flutter 学习之旅 之 flutter 使用 【验证码】输入组件的简单封装
  • 如何安装Visio(win10)
  • 【阿里云大模型高级工程师ACP习题集】2.3 优化提示词改善答疑机器人回答质量
  • python实战项目64:selenium采集软科中国大学排名数据
  • Alertmanager的安装和详细使用步骤总结
  • 【Java面试笔记:基础】12.Java有几种文件拷贝方式?哪一种最高效?
  • JAVA程序获取SVN提交记录
  • SPSS ANOVA分析test
  • 云原生--CNCF-2-五层生态结构(成熟度3层分类,云原生生态5层结构)
  • 18487.1-2015-解读笔记之四-交流充电之流程分析
  • word内容使用python替换
  • 【go】go run-gcflags常用参数归纳,go逃逸分析执行语句,go返回局部变量指针是安全的
  • 连锁美业管理系统「数据分析」的重要左右分析︳博弈美业系统疗愈系统分享
  • 自动创建 中国古代故事人物一致性图画,看看扣子的空间是否能达到你的满意,自媒体的福音?
  • PCB规则
  • Python爬虫实战:获取xie程网敦煌景点数据,为51旅游路线做参考
  • Linux网络编程 从集线器到交换机的网络通信全流程——基于Packet Tracer的深度实验
  • 百位名人写“茶”字,莫言王蒙贾平凹都写了
  • 一夜跌去200美元,黄金巨震冲上热搜!涨势已近尾声?
  • 特朗普激发加拿大爱国热情:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • 河南濮阳南乐县官方回应“幼儿园强制订园服”:已责令整改
  • 神舟十九号航天员乘组计划于4月29日返回东风着陆场
  • 体坛联播|曼城击败维拉迎英超三连胜,巴萨遭遇魔鬼赛程