《Vue3 踩坑》expose 和 defineExpose 暴露属性或方法注意事项

选项式写法

使用 选项式API - 状态选项 - expose 一定要注意:

接下来,进一步看示例说明:

设置 expose

  • 仅显示列出的属性/方法才能被父组件调用;
  • 代码第 2 行,父组件可访问属性 a 和 方法 myFunc01,不可访问属性 b 和 方法 myFunc02;
js 复制代码
export default {
    expose: ['a', 'myFunc01'],
    data() {
        return {
            a: 1,
            b: 2
        }
    },
    methods: {
        myFunc01(){
            //...
        },
        myFunc02(){
            //...
        }
    }
}
</script>

不设置expose

  • 默认全部属性/方法都可被父组件调用;
  • 父组件可访问 a、b、 myFunc01,myFunc02 等全部属性/方法!我就在这里犯错了...
js 复制代码
export default {
    data() {
        return {
            a: 1,
            b: 2
        }
    },
    methods: {
        myFunc01(){
            //...
        },
        myFunc02(){
            //...
        }
    }
}

组合式写法

设置 defineExpose

  • 组合式写法默认所有属性和方法都是私有的 ,需要使用 defineExpose 宏显示暴露;
  • 代码 15-18 行,父组件只能 调用属性 a 和方法 myFunc01;
  • defineExpose 无需引入,在<script setup>中可直接使用;
js 复制代码
<script setup>
import { ref } from 'vue'

const a = ref(1)
const b = ref(2)

function myFunc01(){
    //...
}

function myFunc02(){
    //...
}

defineExpose({
    a,
    myFunc01
})
</script>
相关推荐
M--Y4 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
星栈5 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技5 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569155 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马8 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng8 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding9 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
johnjincaaaa9 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端
鶴哥只手遮天9 小时前
《Electron 45.2.3 内核解剖》第 4 章 补丁体系:380 个补丁改了什么
前端·electron
FungLeo12 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构