7***@tmp.dcloud.io
7***@tmp.dcloud.io
  • 发布:2025-08-05 18:34
  • 更新:2025-08-06 17:10
  • 阅读:77

【报Bug】uniapp 微信小程序 动态插槽 问题?

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 22H2

HBuilderX类型: 正式

HBuilderX版本号: 4.75

第三方开发者工具版本号: 1.06.2504010win32-x64

基础库版本号: 3.8.0

项目创建方式: HBuilderX

示例代码:
<up-form  
      ref="formRef"  
      :model="form"  
      :rules="rules"  
      borderBottom  
      labelPosition="left"  
      labelWidth="156rpx"  
    >  
      <template v-for="(item, index) in items" :key="index">  
        <up-form-item  
          :label="item.label"  
          :prop="item.prop"  
          :required="item.required"  
        >  
          <!-- 判断有没有对应的插槽内容 -->  
          <template v-if="$slots[item.prop]">  
            <view>动态插槽--------{{item.prop}}</view>  
            <slot :item="item" :model="form" :name="item.prop" />  
          </template>  
 </up-form-item>  
      </template>  
    </up-form>

这个是form的插槽部分

操作步骤:
<CustomForm  
      :form="form"  
      :items="ITEMS"  
      :mode="mode"  
      :rules="rules"  
      title="质检单"  
    >  
      <template #imei="{ item, model }">  
        {{ item }}  

        123  
      </template>  
    </CustomForm>

组件实例

预期结果:

组件实例 中 动态插槽 正常渲染 内容

实际结果:

动态插槽 无法正常展示内容
但是正常渲染 动态插槽------可以正常显示prop,但是内容没显示
下面的具名插槽可以实现插槽效果
<template #imei>test_slot</template>

bug描述:

uniapp 微信小程序 动态插槽 渲染的问题?

无法在 微信小程序 中使用 动态插槽 渲染 内容,命名插槽 可以 正常渲染?

2025-08-05 18:34 负责人:无 分享
已邀请:
3***@qq.com

3***@qq.com

小程序好像不支持

DCloud_UNI_JBB

DCloud_UNI_JBB

发下完整的可复现demo

  • 7***@tmp.dcloud.io (作者)

    <template>  
    <up-form
    ref="formRef"
    :model="form"
    :rules="rules"
    borderBottom
    labelPosition="left"
    labelWidth="156rpx"
    >
    <template v-for="(item, index) in items" :key="index">
    <up-form-item
    :label="item.label"
    :prop="item.prop"
    :required="item.required"
    >
    <!-- 判断有没有对应的插槽内容 -->
    <template v-if="$slots[item.prop]">
    <slot :item="item" :model="form" :name="item.prop" />
    </template>

    <!-- 没有插槽时渲染默认表单控件 -->
    <template v-else>
    <up-input
    v-if="item.type === 'input'"
    v-model="form[item.prop]"
    :placeholder="item.placeholder"
    :shape="item.shape || 'circle'"
    :type="item.inputType || 'text'"
    />

    <up-number-box
    v-else-if="item.type === 'number'"
    v-model="form[item.prop]"
    :max="item.max || 999"
    :min="item.min || 0"
    :step="item.step || 1"
    >
    <template #minus>
    <view class="icon-style">
    <uni-icons size="20" type="back" />
    </view>
    </template>
    <template #plus>
    <view class="icon-style">
    <uni-icons size="20" type="forward" />
    </view>
    </template>
    </up-number-box>
    </up-form-item>
    </template>
    </up-form>
    </template>
    <script setup>
    import { ref } from 'vue';

    const props = defineProps({
    form: { type: Object, required: true },
    items: { type: Array, required: true },
    rules: { type: Object, default: () => ({}) },
    title: { type: String, default: '角色' },
    mode: { type: String, default: 'add' },
    onSubmit: { type: Function },
    onCancel: { type: Function },
    });
    const formRef = ref();

    defineExpose({
    validate: () => formRef.value?.validate(),
    });
    </script>

    现在只能通过具名插槽的方式实现


    <template>  
    <CustomForm
    ref="formRef"
    :form="form"
    :items="FORMITEMS"
    :mode="mode"
    :on-cancel="goBack"
    :on-submit="submitForm"
    :rules="rules"
    title="展示功能"
    >
    <template #pageId>
    <uni-combox
    v-model="form.pageId"
    :candidates="pages"
    placeholder="请输入或选择页面"
    >
    </uni-combox>
    </template>
    </CustomForm>
    </template>
    <script setup>

    //模式
    const mode = ref("add");

    //用户
    const user = ref([]);
    //回显数据
    const _user = ref([]);

    const pages = ref([]);
    const _pages = ref([]);
    //应用表单
    const form = reactive({
    checkShow: "1",
    pageId: "",
    show: "1",
    userId: "",
    });

    //表单
    const formRef = ref(null);

    const rules = {
    pageId: [{ required: true, message: "请输入应用名称" }],
    };

    const FORMITEMS = computed(() => [
    {
    label: "页面",
    prop: "pageId",
    required: true,
    type: "input",
    placeholder: "请输入或选择页面",
    shape: "circle",
    },
    ]);
    </script>

    比如我使用这个组件,但是我想实现其他的功能,或者ui,使用动态插槽<template #imei="{ item, model }">

    {{ item }}

    </template> 的情况下 好像支持不是很好

    2025-08-08 09:46

要回复问题请先登录注册