vue3使用自定义组件内方法

文章介绍了在Vue3的ScriptSetup模式下,如何使用`defineExpose`将组件的私有属性和方法导出,以便在父组件中访问。作者强调了`scriptsetup`组件默认不暴露属性和方法,但通过`defineExpose`可以实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重点

使用 defineExpose 来导出方法

// child
<script setup>
import { ref, Ref } from 'vue'

const prop: Ref<string> = ref('child')

const method = (val: string) => {
	console.log(val)
}

defineExpose({
	prop,
	method,
})
</script>
// father
<template>
	<child ref="child" />
</template>

<script setup>
import { ref } from 'vue'
import child from './child.vue'

const child = ref<InstanceType<typeof child>>()

child.value.method(child.value.prop)
</script>

详解

< script setup> 组件时默认不导出属性方法的(类似 java 的 private ),即通过 ref 获取实例是无法访问到自定义的属性和方法,但是可以获取到组件实例。
可以通过 defineExpose 来指定要暴露的方法属性,便可以在外部访问到组件自定义的属性方法了。
当然也可以去官网查看官方说法。

### 如何在 UniApp Vue3 项目中引入和使用自定义组件 #### 创建自定义组件 为了创建一个自定义组件,在 `src/components` 文件夹内新建名为 MyComponent.vue 的文件。此操作遵循标准的 Vue 组件结构,允许开发者利用单文件组件的优势[^1]。 ```html <template> <div class="my-component"> <!-- 组件模板 --> </div> </template> <script setup> // 这里可以声明响应式数据、方法和其他选项 import { ref } from &#39;vue&#39;; const message = ref(&#39;Hello from my component!&#39;); </script> <style scoped> .my-component { /* 样式 */ } </style> ``` #### 注册并使用组件 当希望在一个页面或另一个组件使用上述创建好的自定义组件时,需先导入再注册它。对于采用 `<script setup>` 语法糖的情况,可以直接在脚本标签内部完成这些工作[^2]。 ```html <!-- Page 或其他父级组件中的代码片段 --> <template> <div> <MyComponent /> </div> </template> <script setup> import MyComponent from &#39;@/components/MyComponent.vue&#39;; </script> ``` 如果打算在整个应用范围内全局可用,则可以在项目的入口文件 main.js(main.ts) 中进行一次性注册: ```javascript import { createApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; // 导入所有需要作为全局组件的部分 import MyComponent from &#39;@/components/MyComponent.vue&#39; const app = createApp(App) // 将其挂载到全局上下文中以便任何地方都能访问 app.component(&#39;MyComponent&#39;, MyComponent).mount(&#39;#app&#39;) ``` 另外一种方式是在 `env.d.ts` 文件中做批量模块声明,从而简化路径引用过程[^5]: ```typescript declare module &#39;@/components/*&#39; { import type { ComponentOptions } from &#39;vue&#39; const component: ComponentOptions export default component } ``` 这样设置之后就可以更方便快捷地按需加载各个局部使用组件而无需每次都写完整的相对路径了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值