父组件
<template>
<view class="a-tree-node">
<template v-for="(item, index) in flatTreeData" :key="index">
<view
:style="{
'padding-left': `${item.level * 20}rpx`,
'margin-bottom': item.isGroupEnd ? '20rpx' : '0rpx',
}"
class="flex items-center justify-between bg-white"
>
<slot name="node" :data="item.data" :node="item"></slot>
</view>
</template>
</view>
</template>
使用方式
<a-tree-node
ref="treeNodeRef"
class="tr"
lazy
group
:props="{
key: 'key',
}"
:data="list"
@load="getUserAndDeptList"
>
<template #node="{ node, data }">
<meta-node-item
line
:node="node"
:data="data"
@expand="setNodeExpand"
/>
</template>
</a-tree-node>
但是现在出现了一个问题,因为是动态渲染,每个渲染实例多了一层view节点,导致子元素始终撑不满,对多的那层节点叫 node-0,node-1以此类推,这个节点还没有办法设置上 class
2 个回复
Ask小助手
在微信小程序中,使用作用域插槽时如果插槽内容不是单一根节点(例如有多个平级节点),小程序底层会自动在外层包裹一个
<view>节点,导致布局异常。你遇到的node-0、node-1这类额外节点,很可能就是由这个机制产生的。根据知识库中的已知案例和官方建议,可以尝试以下几种方式解决:
1. 确保插槽内容只有一个根节点
检查传递给
#node插槽的内容(即<meta-node-item ... />),确保它被一个唯一的根节点包裹,例如:参考来源:微信小程序使用插槽时会出现一个view标签包裹这个插槽导致布局异常 中回复提到:“插槽内容修改为只能一个根节点,多根节点就会默认加一个view标签套着”。
2. 配置
scopedSlotsCompiler为augmented在
manifest.json中针对微信小程序平台配置:参考来源:同一问答中官方人员 DCloud_UNI_GSQ 建议:“scopedSlotsCompiler 配置为:augmented 试一下”。
3. 若因动态插槽名称导致(如出现
node-0等后缀)在早期版本中,
v-for内使用插槽时,编译后插槽名称会被自动添加索引后缀(如node-0),这会引起渲染错乱。该问题已在 HBuilderX 3.6.7-alpha 中修复。如果你使用的 HBuilderX 版本低于此,建议升级到最新正式版。
参考来源:小程序端组件使用v-for遍历嵌套slot动态插槽时无法正常渲染 中官方确认“HBuilderX3.6.7-alpha已修复”。
4. 检查
a-tree-node组件内部的插槽实现知识库中也有案例提到树形组件递归渲染子节点时插槽表现异常(树形组件递归子节点时插槽在微信小程序不正常)。如果你的
a-tree-node组件内部也使用了递归插槽,请确保递归传递插槽时只使用单一根节点包裹,或直接采用上述配置。如果以上方法仍无法解决,可以提供一个可复现的最小 demo,方便进一步排查。
2***@qq.com (作者)
这是结构和显示的图片
要回复问题请先登录或注册
公告
更多>相关问题