自定义element-ui plus 函数式调用,在API,js中直接使用全局组件

npm方式:

复制代码
npm install -D unplugin-vue-components unplugin-auto-import

yarn 方式 :

html 复制代码
yarn add unplugin-vue-components;
yarn add unplugin-auto-import;

使用官方的这个:

html 复制代码
vite.config.js中配置
plugins: [
        vue(),
        AutoImport({
            resolvers: [ElementPlusResolver()],
        }),
        Components({
            resolvers: [VantResolver(), ElementPlusResolver()],
        }),
    ],

LoginDialog.js定义

html 复制代码
import {createApp} from 'vue'
import SubDialog from './LoginDialog.vue'

/**
 * 关键函数挂在整个页面上去
 */
const createDialog = () => {
    const mountNode = document.createElement('div')
    mountNode.setAttribute('id', 'dialog-mask-dialog')
    const Instance = createApp(SubDialog, {
        show: true,
        close: () => {
            Instance.unmount(mountNode);
            document.body.removeChild(mountNode);
        }
    })

    document.body.appendChild(mountNode)
    Instance.mount(mountNode)
}

export default createDialog

LoginDialog.vue 定义

html 复制代码
<template>
  <Teleport to="body">

    <el-dialog
        v-model="props.show"
        title="登录"
        width="500px"
        center
    >
      <el-form :model="loginForm" :rules="formDataRule" ref="formRef" label-width="120px">
        <el-form-item label="用户名" prop="phone">
          <el-input v-model="loginForm.phone" placeholder="输入手机号"/>
        </el-form-item>
        <el-form-item label="验证码" prop="verifyCode">
          <div style="display: inline-block">
            <el-input v-model="loginForm.verifyCode" placeholder="输入验证码"/>
          </div>
          <div style="display: inline-block">
            <el-button>获取验证码</el-button>
          </div>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitLogin(formRef)">登录</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>
  </Teleport>
</template>

<script setup>
import {reactive, ref} from "vue";

const formRef = ref(null)

const loginForm = reactive({
  phone: '',
  verifyCode: ''
})


const formDataRule = {
  phone: [{required: true, message: '手机号不能为空', trigger: 'blur'}],
  verifyCode: [{required: true, message: '验证码不能为空', trigger: 'blur'}]
}

const props = defineProps({
  show: {
    type: Boolean,
    default: false
  }
})


const submitLogin = (ref) => {
  ref.validate((valid) => {
    if (valid) {
      console.log('submit!')
    } else {
      console.log('error submit!')
      return false
    }
  })
}


</script>

<style scoped>

</style>
相关推荐
多看书少吃饭2 分钟前
OnlyOffice 编辑器的实现及使用
前端·vue.js·编辑器
float_六七4 分钟前
JS比较运算符:从坑点速记到实战口诀
开发语言·javascript·ecmascript
编程之路从0到19 分钟前
JSI入门指南
前端·c++·react native
开始学java10 分钟前
别再写“一锅端”的 useEffect!聊聊 React 副作用的逻辑分离
前端
百度地图汽车版15 分钟前
【智图译站】基于异步时空图卷积网络的不规则交通预测
前端·后端
qq_124987075318 分钟前
基于Spring Boot的“味蕾探索”线上零食购物平台的设计与实现(源码+论文+部署+安装)
java·前端·数据库·spring boot·后端·小程序
用户658681803384019 分钟前
Vue3 项目编码规范:基于Composable的清晰架构实践
vue.js
编程之路从0到120 分钟前
React Native 之Android端 Bolts库
android·前端·react native
小酒星小杜20 分钟前
在AI时代,技术人应该每天都要花两小时来构建一个自身的构建系统 - Build 篇
前端·vue.js·架构
zengyufei22 分钟前
2.4 watch 监听变化
vue.js