Vue 3 Typescript 无法从 ref 访问方法
Vue 3 Typescript unable to access method from ref
大家好,我是 Vue 3 和 Typescript 的新手,我很难尝试解决我项目中的 typescript 错误,下面是 typescript 错误。
它无法找到验证方法,但当我尝试对其进行控制时它显示了。
Property 'validate' does not exist on type 'string'.
我正在使用 Vue 3 组合 api 以及 typescript 和 Vue Element Plus,下面是我的组件代码。
组件
<template>
<div class="w-full h-full absolute flex">
<el-form
class="w-4/5 sm:w-1/2 lg:w-1/3 xl:w-1/4 m-auto"
:ref="formRef"
:model="form"
:rules="rules"
>
<h2>Login</h2>
<el-form-item label="Email" prop="email">
<el-input
type="email"
autocomplete="off"
v-model="form.email"
/>
</el-form-item>
<el-form-item label="Password" prop="password">
<el-input
type="password"
autocomplete="off"
v-model="form.password"
/>
</el-form-item>
<el-form-item>
<el-button
type="success"
class="w-full"
@click="handleLogin"
>Submit</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script lang="ts">
import { defineComponent, onBeforeMount, onMounted, reactive, ref } from "vue";
export default defineComponent({
name: "Login",
setup() {
const form = reactive({
email: "",
password: ""
});
const rules = ref({
email: [{
required: true,
message: "Email is required",
trigger: "blur"
}],
password: [{
required: true,
message: "Password is required",
trigger: "blur"
}]
});
const formRef = ref("formRef");
const handleLogin = () => {
console.log(formRef)
// Property 'validate' does not exist on type 'string'.
formRef.value?.validate((valid: boolean) => {
console.log(valid);
});
};
onMounted(() => {
console.log("Login mounted");
});
onBeforeMount(() => {
console.log("Login onBeforeMount");
});
return {
formRef,
form,
rules,
handleLogin
};
}
});
</script>
有一些错误。 ref 接收原始类型字符串、布尔值等...对于对象使用反应式。
所以你应该使用 reactive 而不是 ref 来定义规则。
const rules = reactive({
email: [{
required: true,
message: "Email is required",
trigger: "blur"
}],
password: [{
required: true,
message: "Password is required",
trigger: "blur"
}]
});
您不需要绑定您的 ref,所以这样做:
<el-form
class="w-4/5 sm:w-1/2 lg:w-1/3 xl:w-1/4 m-auto"
ref="formRef"
:model="form"
:rules="rules"
>
我建议您使用 html 铸造对象来声明您的 formRef。
像这样:
const formRef = ref<HTMLFormElement>();
希望对你有所帮助=)
大家好,我是 Vue 3 和 Typescript 的新手,我很难尝试解决我项目中的 typescript 错误,下面是 typescript 错误。
它无法找到验证方法,但当我尝试对其进行控制时它显示了。
Property 'validate' does not exist on type 'string'.
我正在使用 Vue 3 组合 api 以及 typescript 和 Vue Element Plus,下面是我的组件代码。
组件
<template>
<div class="w-full h-full absolute flex">
<el-form
class="w-4/5 sm:w-1/2 lg:w-1/3 xl:w-1/4 m-auto"
:ref="formRef"
:model="form"
:rules="rules"
>
<h2>Login</h2>
<el-form-item label="Email" prop="email">
<el-input
type="email"
autocomplete="off"
v-model="form.email"
/>
</el-form-item>
<el-form-item label="Password" prop="password">
<el-input
type="password"
autocomplete="off"
v-model="form.password"
/>
</el-form-item>
<el-form-item>
<el-button
type="success"
class="w-full"
@click="handleLogin"
>Submit</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script lang="ts">
import { defineComponent, onBeforeMount, onMounted, reactive, ref } from "vue";
export default defineComponent({
name: "Login",
setup() {
const form = reactive({
email: "",
password: ""
});
const rules = ref({
email: [{
required: true,
message: "Email is required",
trigger: "blur"
}],
password: [{
required: true,
message: "Password is required",
trigger: "blur"
}]
});
const formRef = ref("formRef");
const handleLogin = () => {
console.log(formRef)
// Property 'validate' does not exist on type 'string'.
formRef.value?.validate((valid: boolean) => {
console.log(valid);
});
};
onMounted(() => {
console.log("Login mounted");
});
onBeforeMount(() => {
console.log("Login onBeforeMount");
});
return {
formRef,
form,
rules,
handleLogin
};
}
});
</script>
有一些错误。 ref 接收原始类型字符串、布尔值等...对于对象使用反应式。
所以你应该使用 reactive 而不是 ref 来定义规则。
const rules = reactive({
email: [{
required: true,
message: "Email is required",
trigger: "blur"
}],
password: [{
required: true,
message: "Password is required",
trigger: "blur"
}]
});
您不需要绑定您的 ref,所以这样做:
<el-form
class="w-4/5 sm:w-1/2 lg:w-1/3 xl:w-1/4 m-auto"
ref="formRef"
:model="form"
:rules="rules"
>
我建议您使用 html 铸造对象来声明您的 formRef。
像这样:
const formRef = ref<HTMLFormElement>();
希望对你有所帮助=)