vue3
+ vite
+ electron
+ element-plus
创建的界面使用的 el-form
+ el-input
。
每次获取焦点之后只能输入一个字符,单独使用 el-input
没有问题,放到 el-form
里面之后就有问题了。
<template>
<div class="login-container">
<div class="login-box">
<el-card class="box-card">
<el-form ref="loginForm" :model="loginForm" :rules="rules" label-width="80px">
<el-form-item label="用户名:" prop="username">
<el-input v-model="loginForm.username"></el-input>
</el-form-item>
<el-form-item label="密码:" prop="password">
<el-input type="password" v-model="loginForm.password"></el-input>
</el-form-item>
<el-form-item class="login-btn">
<el-button type="primary" @click="handleLogin">登录</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</div>
</template>
<script setup>
import { ref, getCurrentInstance } from 'vue';
import { useRouter } from 'vue-router';
import { ElCard, ElForm, ElFormItem, ElInput, ElButton } from 'element-plus';
const { proxy } = getCurrentInstance();
const router = useRouter();
const loginForm = ref({
username: '',
password: '',
});
const rules = ref({
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
});
const handleLogin = () => {
proxy.$refs['loginForm'].validate((valid) => {
if (valid) {
router.push({ name: 'Interface' });
}
});
};
</script>
单独使用 el-input
,不用el-form
没有问题,使用 el-form
+ 原生input
也没问题。
很简单,你的
$refs
注册的key和你ref()
声明的loginForm
重合了。在组件实例挂载之后会被覆盖成
el-form
的模板引用,所以你没办法修改loginForm.username
了。el-input
是 受控组件 所以会有OP你说的问题现象。要解决的话,改成不一样的key就行了。
另外最好不要再使用
getCurrentInstance
获取当前组件实例了。