You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vuetify+Vue.js动态表单中实现多个密码框的单独显隐切换

问题根因

你当前所有密码框共用了同一个全局的showPasswordIcon状态变量,修改这个变量会同步触发所有密码框的显隐状态更新,才会出现切换一个全变的问题。

解决步骤

  1. 替换全局显隐状态,改用对象存储每个密码字段的单独显隐状态,用formField.key作为索引区分不同字段
  2. 把密码框的显隐相关绑定都改成对应字段的独立状态
  3. 切换事件触发时仅修改当前字段对应的状态值

代码修改示例

1. Script部分调整(以Vue2为例,Vue3可直接用ref定义对象)

export default {
  data() {
    return {
      // 新增这个对象存储每个密码字段的独立显隐状态
      passwordVisible: {},
      // 原有其他变量保留
      formFields: []
    }
  },
  methods: {
    getFormFields() {
      // 调用接口获取formFields的逻辑执行完成后
      this.formFields = 接口返回的表单配置数组
      // 初始化所有密码字段的显隐状态为隐藏,Vue2需要用$set保证响应式
      this.formFields.forEach(field => {
        if (field.type === 'password') {
          this.$set(this.passwordVisible, field.key, false)
        }
      })
    }
  }
}

2. Template部分密码框调整

把原有的密码框v-text-field替换为以下代码:

<v-text-field
  v-if="formField.type === 'password'"
  :id="formField.key"
  :key="formField.key"
  v-model="formField.value"
  :append-icon="passwordVisible[formField.key] ? '$vuetify.icons.values.eye' : '$vuetify.icons.values.eyeSlash'"
  :type="passwordVisible[formField.key] ? 'text' : 'password'"
  :hint="getHintText(formField)"
  :required="formField.required"
  :valid="(!formField.isValid) ? false : undefined"
  dense
  @input="inputHandler(formField)"
  @blur="inputHandler(formField, false)"
  @click:append="() => { passwordVisible[formField.key] = !passwordVisible[formField.key] }"
/>

额外优化点

你原有的密码框同时写了v-model="formField.value"和:value="formField.name",属于冗余配置还可能引发值冲突,建议删除:value="formField.name"属性。

内容的提问来源于stack exchange,提问作者JDun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:15:02