gpt4 book ai didi

javascript - 使用 Vue3 公开创建 Web 组件的方法

转载 作者:行者123 更新时间:2023-12-02 01:43:56 25 4
gpt4 key购买 nike

我正在使用 VueJS 3 创建一个网络组件,我想在组件上公开一个方法,允许用户执行如下操作:

  <custom-component id="x1" />

<script>
var component = document.getElementById("x1");

component.customMethod(); // as focus() method on native elements
</script>

如果我在组件上定义了一个方法,我就可以在组件内部调用这个方法。但是当我将它用作网络组件时,该方法不可用。

  //main.ts/js
import { defineCustomElement } from "vue"
import component from "./component.ce.vue"

const element = defineCustomElement(component );

customElements.define("custom-component ", element);
  //component.ce.vue
const customMethod = () => { console.log("Executed"); }

我如何向 Vue Component Wrapper 表明 customMethod 将在组件外部可用?

最佳答案

<script setup> , 使用 defineExpose() macro :

<script setup>
const customMethod = () => {⋯}
👇
defineExpose({ customMethod })
</script>

setup()钩子(Hook),使用 expose property of the context argument :

<script>
export default { 👇
setup(props, { expose }) {
const customMethod = () => {⋯}
👇
expose({ customMethod })
}
}
</script>

在选项 API 中,使用 expose option :

<script>
export default {
👇
expose: ['customMethod'],
methods: {
customMethod() {⋯}
}
}
</script>

目前(从 Vue 3.2.31 开始),访问自定义元素公开属性的唯一方法是通过其 _instance.exposed属性:

<!-- example/index.html -->
<body>
<custom-component id="x1"></custom-component>
<script>
const el = document.getElementById('x1')
👇
el._instance.exposed.customMethod()
</script>
</body>

_instance是私有(private)属性,请谨慎使用此解决方案,因为该属性可能会在未来的版本中重命名/删除。

demo ( <script setup> )

demo ( setup() hook)

demo (Options API)

关于javascript - 使用 Vue3 公开创建 Web 组件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71198220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com