computed与asyncComputed

发布时间:2024年01月15日

computed不支持异步;asyncComputed支持异步

使用场景:在用户注册或者其他信息新增的过程中,通常会在填写表单,并且检验通过之后,才允许点击确认按钮,由于form表单校验的方法执行的过程是异步的,所以,此时不能使用computed,经过查找资料,此处可使用asyncComputed代替,具体使用过程如下,

废话不多说,直接上代码

<el-form ref="formRef" :model="formData" :rules="rules">
    <el-form-item prop="name">
        <el-input v-model="formData.name" />
    </el-form-item>
    <el-form-item>
        <!--  此处许需要在填写完表单信息,并且检验通过之后才允许点击 -->
         <el-button type="primary" :disabled="!disabledFlag">测试禁用</el-button>
    </el-form-item>
</el-form>


import type { FormInstance, FormRules } from 'element-plus'
import { asyncComputed } from '@vueuse/core'

const formRef = ref<FormInstance>()
const formData = ref({
  name: ''
})
// 规则校验
const rules = ref<FormRules>({
  name: [
    { required: true, message: '请输入姓名', trigger: 'change' },
    { pattern: /^(-)?[0-9]*$/g, message: '请输入数字', trigger: 'change' }
  ]
})

const disabledFlag = asyncComputed(async () => {
  const { name } = formData.value
  if (name) {
    // validate是一个异步函数
    const res = await formRef.value?.validate((valid) => {
      return valid
    })
    return res
  } else {
    return false
  }
})

文章来源:https://blog.csdn.net/listener_life/article/details/135592737
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。