vue3给动态渲染的组件添加ref | 我的日常分享

vue3给动态渲染的组件添加ref

vue3给动态渲染的组件添加ref

以下代码只粘贴的核心部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<script setup lang="ts">
let nodeRefs = {}; // 1. 定义refs

const decodeAppendDom = (node, dom, props: any = {}) => {
nodeRefs[node.id] = ref(null); // 2. 初始化refs
dom.unshift(
h(nodeTypeMap[node.type.toLowerCase()], {
...props,
config: node,
ref: nodeRefs[node.id], // 3. 绑定ref
key: node.id,
onInsertNode: (type: string) => insertNode(type, node),
onDelNode: () => delNode(node),
onSelected: () => selectNode(node),
onCopy: () => copyBranch(node),
onLeftMove: () => branchMove(node, -1),
onRightMove: () => branchMove(node, 1),
}),
);
};

const validateNode = (err, node) => {
// 使用ref
console.log(nodeRefs[node.id].value.validate, node);
if (nodeRefs[node.id].value.validate) {
valid.value = nodeRefs[node.id].value.validate(err);
}
};
</script>

参考:https://huaweicloud.csdn.net/638f1210dacf622b8df8e796.html

通过以下方式获取不到,不知道是什么原因:

1
2
const { proxy }: any = getCurrentInstance();
console.log(proxy.$refs)