【Vue3】defineExpose

这篇具有很好参考价值的文章主要介绍了【Vue3】defineExpose。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Vue3】defineExpose

defineExpose 是 Vue 3.2 引入的一个新 API,它是 <script setup> 的配套 API 之一。在 <script setup> 中,所有定义的变量和函数默认是私有的,不能从组件外部访问。如果你想让外部组件访问到 <script setup> 内定义的属性或方法,你需要使用 defineExpose 显式地暴露它们。

这是 defineExpose 的基本用法:

<script setup>
import { defineExpose } from 'vue'

// ... 定义响应式数据、函数等

defineExpose({
  a,
  b,
  c()
  // ... 这里列出你想暴露的属性和方法
})
</script>

在上面的代码中,a、b 和 c 是在 <script setup> 中定义的,通过 defineExpose 将它们暴露给父组件。这样,父组件就可以通过模板引用(ref)或者 setup() 函数的 context.expose 属性来访问这些暴露的属性和方法。

defineExpose 的引入是为了提供一种清晰的方式来控制组件的公共接口,避免所有的内部状态都被外部访问,从而增强组件的封装性。文章来源地址https://www.toymoban.com/news/detail-831433.html

完整实例代码

<script lang="ts" setup>
import { computed, onMounted, ref } from 'vue'
import { useAppStore } from '../store/app'
import { useUserStore } from '../store/user'
import GlobalSetup from './global/GlobalSetup.vue'
import GlobalContent from './global/GlobalContent.vue'
import GlobalBreadcrumb from './global/GlobalBreadcrumb.vue'
import GlobalTab from './global/GlobalTab.vue'
import GlobalMenu from './global/GlobalMenu.vue'
import GlobalMainMenu from './global/GlobalMainMenu.vue'
import GlobalMessageTab from './global/GlobalMessageTab.vue'
import { useRouter } from 'vue-router'
import { useMenu } from './composable/useMenu'
import zh_CN from '../lang/zh_CN'
import en_US from '../lang/en_US'

const appStore = useAppStore()
const userInfoStore = useUserStore()
const fullscreenRef = ref()
const visible = ref(false)
const sideWidth = computed(() =>
  appStore.collapse
    ? '60px'
    : appStore.subfield && appStore.subfieldPosition == 'side'
      ? '280px'
      : '220px'
)
const router = useRouter()

const {
  selectedKey,
  openKeys,
  menus,
  mainMenus,
  mainSelectedKey,
  changeMainSelectedKey,
  changeSelectedKey,
  changeOpenKeys
} = useMenu()

onMounted(() => {
  if (document.body.clientWidth < 768) {
    appStore.collapse = true
  }
  userInfoStore.loadMenus()
  userInfoStore.loadPermissions()
})

const changeVisible = () => {
  visible.value = !visible.value
}

const currentIndex = ref('1')

const collapse = () => {
  appStore.collapse = !appStore.collapse
}

const refresh = () => {
  appStore.routerAlive = false
  setTimeout(() => {
    appStore.routerAlive = true
  }, 500)
}

const logOut = () => {
  userInfoStore.token = ''
  userInfoStore.userInfo = {}
  router.push('/login')
}

const locales = [
  { name: 'zh_CN', locale: zh_CN, merge: true },
  { name: 'en_US', locale: en_US, merge: true }
]

const toUserInfo = () => {
  router.push('/enrollee/profile')
}

const toSystemSet = () => {
  router.push('/system/menu')
}

const flag = ref(false)
const changeDropdown = () => {
  flag.value = !flag.value
}

// DefineExpose is needed to expose local variables to parent components
defineExpose({
  sideWidth,
  mainSelectedKey,
  fullscreenRef,
  appStore,
  visible,
  menus,
  mainMenus,
  userInfoStore,
  currentIndex,
  selectedKey,
  openKeys,
  collapse,
  changeOpenKeys,
  changeSelectedKey,
  changeMainSelectedKey,
  changeVisible,
  refresh,
  logOut,
  locales,
  toUserInfo,
  toSystemSet,
  changeDropdown,
  flag
})
</script>

到了这里,关于【Vue3】defineExpose的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端技术】Vue3 01:初识 Vue.js

    Vue 可以说是非常流行了,至少在国内是这样,他是个轻量级的 JavaScript 框架,非常适合构建大型和中小型的 Web 应用程序,如果想和前端打交道,应该绕不过这个框架吧。 目录 1 Vue.js 介绍 2  IDE 选择 2.1 vscode 2.2 WebStorm 2.3 Eclipse 3  创建 Vue 应用 3.1 本地脚手架创建 ① 安装

    2024年02月02日
    浏览(60)
  • 前端(四)——vue.js、vue、vue2、vue3

    😊博主:小猫娃来啦 😊文章核心: vue.js、vue、vue2、vue3从全局到局部 Vue.js是一款流行的JavaScript框架 vue,vue2,vue3都是vue.js的不同版本。 Vue:Vue.js的第一个版本,也称为Vue 1.x。它于2014年首次发布,并获得了广泛的应用和认可。 Vue2:Vue.js的第二个版本,也称为Vue 2.x。它在Vu

    2024年02月12日
    浏览(75)
  • vue3-setup语法糖之组件传参(defineProps、defineEmits、defineExpose)

    vue3官方文档  defineProps  和  defineEmits  都是只能在  script setup  中使用的 编译器宏 。他们不需要导入,且会随着  script setup  的处理过程一同被编译掉。 defineProps  接收与  props  选项相同的值, defineEmits  接收与  emits  选项相同的值。   父传子  - defineProps  父组件 子

    2023年04月08日
    浏览(46)
  • 前端HTML、CSS、JS、VUE3 汇总

    学习https://developer.mozilla.org/zh-CN/docs/Learn/CSS 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 使用VS Code运行前端代码 在VS Code上安装前端插件 正在更新中~ ✨ 提示:这里可以添加本文要记录的大概内容: 学习路线 知识定位 HTML基础 标签、表格、表单、

    2024年02月13日
    浏览(49)
  • 【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus

    gogo code 是一个基于 AST (源代码的抽象语法结构树状表现形式)的 JavaScript/Typescript/HTML 代码转换工具,可以用它来构建一个代码转换程序来帮助自动化完成如框架升级、代码重构、多平台转换等工作。 当前 GoGoCode 支持解析和操作如下类型的代码: ○JavaScript(JSX) ○Typescript

    2024年02月12日
    浏览(51)
  • 前端2023最全面试题(javaScript、typeScript、vue2、vue3、html、css、uniapp、webpack、vite、react)

    答案:JavaScript中的闭包是一种函数,它有权访问其词法环境的变量和其它函数。这意味着,即使其包含它的函数已经执行完毕,其词法环境仍然存在,因此可以访问其作用域内的变量。 答案:回调函数是在某个特定事件之后执行的函数。在JavaScript中,通常使用回调函数来处

    2024年02月06日
    浏览(62)
  • vue3创建项目报错Vue.js - The Progressive JavaScript Framework TypeError: (0 , import_node_ut

    报错信息: Vue.js - The Progressive JavaScript Framework TypeError: (0 , import_node_util.parseArgs) is not a function     at init (C:UsersAdministratorAppDataLocalnpm-cache_npx2f7e7bff16d1c534node_modulescreate-vueoutfile.cjs:4481:72)     at Object.anonymous (C:UsersAdministratorAppDataLocalnpm-cache_npx2f7e7bff16d1c534node_module

    2024年04月10日
    浏览(145)
  • 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等

    答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 答: 不要在计算属性中进行异步请求或者更改DOM 不要直接修改computed的值 区别: 计算属性值基于其响应式依赖被缓存,意思就是只要他之前的依赖不发生变化,那么调用他只会返回之前缓

    2024年02月11日
    浏览(58)
  • 服务端使用ASP.NET Core SignalR与Vue3(TypeScript与JavaScript)前端建立通信(以进度条为例)

    1. ASP.NET Core           ASP.NET Core 是一个跨平台、高性能及开源的框架,用于生成基于云且连接互联网的新式应用程式。 官方文档:ASP.NET documentation | Microsoft Learn  2.  ASP.NET Core SignalR         ASP.NET Core SignalR 是开源库,用于服务端与客户端建立实时通信,可以自动管理连接

    2024年02月06日
    浏览(46)
  • VUE -- defineExpose

    defineExpose 定义:用于组件通信中父级组件调用操作子组建方法和响应式属性参数能力 在使用 definExpose 前需要了解两个拷贝对象函数 对象copy: shallowReactive 与 数据 copy: shallowRef 这两个都是vue包里面的 简单带过一下 shallowReactive :处理对象最外层属性的响应式(浅响应式)。

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包