Skip to content
Navigation

LoginPopup

登录弹出层。

Features

把复杂的登录逻辑和验证码限制交互逻辑进行了封装,简化登录流程。

Props

ts
defineProps({
  /**
   * 是否显示登录面板
   * @tips 必须用双向绑定的形式来传递才能触发父组件的数据更新
   * @example `v-model:show`
   */
  show: {
    type: Boolean,
    required: true,
    default: false,
  },

  /**
   * 点击遮罩是否关闭面板
   */
  closeOnClickOverlay: {
    type: Boolean,
    required: false,
    default: true,
  },

  /**
   * 指定挂载节点
   * @description 默认挂在 `body` ,如果需要指定其他节点,可传入:
   *  节点 ID `#foo`
   *  节点样式名 `.foo`
   *  或者 DOM 元素 `document.querySelector('#foo')`
   * @tips 指定该属性时,必须在 DOM 渲染后才渲染该组件,以确保正常挂载
   */
  teleport: {
    type: String,
    required: false,
    default: 'body',
  },

  /**
   * 是否锁定背景滚动
   */
  lockScroll: {
    type: Boolean,
    required: false,
    default: true,
  },

  /**
   * 父级 ID
   * @description 如果有拉新需求,这里传入邀请人的用户 ID
   */
  parentId: {
    type: String,
    required: false,
    default: '',
  },
})

Emits

receive

虽然 useAuth() 里导出的 loginInfo 相关变量都具备响应性,在登录成功后可以通过这些变量获得最新的登录数据,但组件也提供了一个 @receive 方法用于接收登录成功后返回的登录信息。

ts
import type { LoginInfo } from '@lunarxyz/core'

declare function receive(): LoginInfo | undefined

Live Demo

Usage Example

请注意使用 v-model:arg 的格式对 Props 进行双向绑定,否则无法触发数据更新。

vue
<template>
  <Button type="primary" @click="isShowLoginPopup = !isShowLoginPopup">
    <span>唤起登录</span>
  </Button>

  <ConfigProvider theme="dark">
    <LoginPopup v-model:show="isShowLoginPopup" />
  </ConfigProvider>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import { Button, ConfigProvider } from 'vant'
import { LoginPopup } from '@lunarxyz/components'

const isShowLoginPopup = ref<boolean>(false)
</script>

Released under the MIT License.