// 假定有两个功能块 A 和 B,未封装前代码
<template>
<div ref="BRef"></div>
</template>
<script setup lang="ts">
// A 功能区代码
// B 功能区代码
const BRef = ref();
const doClick = () => {
//可以正常获取
console.log(BRef.value);
}
</script>
//封装抽离功能块
<template>
<div ref="BRef"></div>
</template>
<script setup lang="ts">
// A 功能区代码
import { A 相关 } from './A'
import { BRef, doClick } from './B'
//B 功能区 js 代码
const BRef = ref();
const doClick = () => {
//此处找不到,为 undefined
console.log(BRef.value);
}
export { BRef, doClick }
现在改造必须在最外层重新赋值一下,才能获取,有没有更优雅的写法
<template>
<div ref="BRefCopy"></div>
</template>
<script setup lang="ts">
// A 功能区代码
import { A 相关 } from './A'
import { BRef, doClick } from './B'
const BRefCopy = BRef;
1
Mark85 2022-04-26 16:27:48 +08:00 1
// B
export default function useB() { const BRef = ref() const doClick = () => { // xxx } return { BRef, doClick, } } // 使用 import useB from './B' const {BRef, doClick} = useB() |
2
MinYa OP @Mark85 感谢大佬,这个方法可行,另外我还想到一个写法,直接将 dom 跟 js 一起封装在一个 vue ,这个测试也可行
|
3
Mark85 2022-04-26 16:40:35 +08:00
@Mark85 #1
``` // B export default function useB(BRef) { const doClick = () => { // BRef } return { doClick, } } // 使用 import useB from './B' const BRef = ref() const {doClick} = useB(BRef) ``` |
4
MinYa OP 这个是在顶层将 ref 传递进去,应该是没问题,但是如果要封装的模块很多,感觉就会越来越混乱。
|