uni-app中v-for循环渲染带有slot的vue自定义组件时slot中数据内容无效
uni-app中v-for循环渲染带有slot的vue自定义组件时slot中数据内容无效
uni-app中v-for循环渲染带有slot的vue自定义组件渲染slot中数据内容无效
uni-app中如果引入单个组件正常渲染,一旦在外边添加一层block或view的v-for循环如: (item,index) in list ,slot下的数据如item.xxx,item.text等是渲染不出来的。
示例代码
单个组件的渲染没有问题,一切正常
<uni-swipeout2 operate-width="210">
<view slot="content">
<view class="swipe-item2">
<view class="title">猛虫过江</view>
<view class="label">侏罗纪世界主题公园及豪华度假村被失控的恐龙们摧毁已有四年</view>
</view>
</view>
<view slot="button">
<view class="i-swipeout-demo-button-group">
<view class="i-swipeout-demo-button">点赞</view>
<view class="i-swipeout-demo-button">分享</view>
<view class="i-swipeout-demo-button">删除</view>
</view>
</view>
</uni-swipeout2>
slot=content和slot=button中的数据内容无法正常显示,类似数据丢了一样
<block v-for="(item,index) in swipeoutList" :key="index">
<uni-swipeout2 operate-width="185">
<view slot="content">
<view class="swipe-item2">
<view class="title">猛虫过江</view>
<view class="label">{{item.text}}</view>
</view>
</view>
<view slot="button">
<view class="i-swipeout-demo-button-group" style="background:#2db7f5;">
<view class="i-swipeout-demo-button" style="width:60px;border-right:1px solid #fff;">
<uni-icon size="20" type="zan" color="#fff"></uni-icon>
</view>
<view class="i-swipeout-demo-button" style="width:60px;border-right:1px solid #fff;">
<uni-icon size="20" type="share" color="#fff"></uni-icon>
</view>
<view class="i-swipeout-demo-button" style="width:60px;">
<uni-icon size="20" type="remove" color="#fff"></uni-icon>
</view>
</view>
</view>
</uni-swipeout2>
</block>
最新alpha版可以用
1.9正式版后,手动切换编译模式也可以使用,manifest.json -> app-plus -> usingComponents切换编译模式
// manifest.json
{
// …
/* App平台特有配置 /
“app-plus”: {
“usingComponents”:true //是否启用自定义组件模式
,为true表示新的自定义组件模式
,否则启用老的template模板模式
}
/ 微信小程序特有配置 */
“mp-weixin”: {
“usingComponents”:true //是否启用自定义组件模式
,为true表示新的自定义组件模式
,否则启用老的template模板模式
}
}
https://ask.dcloud.net.cn/article/35818
开启这个之后,如果代码中有使用mixins 会编译报错
最新alpha版兼容以前的代码吗?可以直接下载使用原项目跑吗??
升级hx,manifest设为自定义组件编译模式。
如果是cli项目,npm update升级cli。
如果是自定义基座,重新制作自定义基座。
如果是离线打包,重新下载sdk
v1.91,自定义组件编译模式, 在微信端报错,usingComponents设置回false才正常
回复 s***@126.com: 报什么错,看自定义组件的编译注意文档调整。老编译模式很快会被淘汰
npm update 哪个包 ?
新版本修复这个slot的问题了吗?
经过测试新版本还是没有修复这个问题
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
回复 HRK_01: 为什么我的还是不行,我已经更新hx到最新版本了
我也等呢
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
官方啥时候能修复这个bug呀,好多地方都会用到
楼主怎么规避的?
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
回复 HRK_01: 小程序还是不行
我也是遇到这个问题 头大
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
解决这个问题了吗?我也遇到了。。。
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
同样问题
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
为什么还没有修复
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
坑死了, 原来也是这个问题, 坑了1天
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
框架太坑了,这个常用的功能都有问题,慎用吧,我放弃了
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
经过测试新版本还是没有修复这个问题
slot-scope
2.6+可以用v-slot
@jingxiaotian2016@163.com:你确定APP可以?
这根本就不是作用域插槽的问题。。。
不能v-for不就相当于所有子组件都需要写到父页面中。。这个问题不先解决。。写起来真的很难受。。
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
可以在自定义组件中通过定义一个props:字段对子组件进行取值,父组件里头写一个样式来展示,目前我是这搞得,至少不会再父组件中写死
请问你是怎么绕过这个问题的啊。求教
回复 落叶疏影: 升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
麻烦尽快解决此问题。谢谢!
升级hx,manifest设为自定义组件编译模式之后还会复现该问题吗?
2018-10-29 报出来的问题,现在还没解决。。。无语
最新alpha版可以解决这个问题
http://ask.dcloud.net.cn/article/35765
并没有解决这个问题
回复 m***@163.com: 我将尝试验证并复现你的问题,如果可以,最好提供问题工程以更快协助我们定位问题
好巧 我也遇到了, app ,h5 都没有问题 就微信小程序有, 之前的版本都是好的 , 昨天升级了 hbx 今天更新就出现这个问题
我将尝试验证并复现你的问题,如果可以,最好提供问题工程以更快协助我们定位问题
根本没修复,遇到了同样的问题开发工具版本3.2.12.20211029
我将尝试验证并复现你的问题,如果可以,最好提供问题工程以更快协助我们定位问题
差不多的问题v-for作用域插槽带过来的数组编译不了
我将尝试验证并复现你的问题,如果可以,最好提供问题工程以更快协助我们定位问题
我是直接把循环换成wx:for可以编译了
还是不生效啊,vue3 cli最新不生效
我将尝试验证并复现你的问题,如果可以,最好提供问题工程以更快协助我们定位问题
非常棒!!! 5年了 这bug还没修复!!!
循环中的动态插槽名不生效
我将尝试验证并复现你的问题,如果可以,最好提供问题工程以更快协助我们定位问题
<view class="u-tabs" :style="{
background: bgColor
}">
<view :id="id">
<scroll-view scroll-x class="u-scroll-view" :scroll-left="scrollLeft" scroll-with-animation>
<view class="u-scroll-box" :class="{'u-tabs-scorll-flex': !isScroll}">
<view class=“u-tab-item u-line-1” :id="‘u-tab-’ + index" v-for="(item, index) in list" :key=“index” @tap=“clickTab(index)”
:style="[tabItemStyle(index)]">
<!-- {{ item[name] || item['name']}} -->
<slot :item="item" :count="count" :name="name">
<u-badge :count="item[count] || item['count'] || 0" :offset="offset" size="mini"></u-badge>
{{ item[name] || item['name']}} 00
</slot>
<slot name="titleEx" :item="item" :count="count" :name="name">
11
</slot>
</view>
<view v-if="showBar" class="u-tab-bar" :style="[tabBarStyle]"></view>
</view>
</scroll-view>
</view>
</view>
<u-tabs :list="tabs" :is-scroll="true" :current="tabIndex" @change="tabChange" active-color="#000000"
inactive-color="#999999" :customStyle="{'background-color':'#050505'}">
<template v-slot:default="{ item, count, name }">
{{item}}, {{count}}, {{name}}
</template>
<view #titleEx="{ item, count, name }">
<view>
<image src="../../static/logo.png"></image>
{{ item[name] || item['name']}} - {{item}}, {{count}}, {{name}}
</view>
</view>
</u-tabs>
结果是
今日订单 0011
已完成 0011
完全没覆盖,,到了一种无法使用的程度
我将尝试验证并复现你的问题,如果可以,最好提供问题工程以更快协助我们定位问题
<view class=“item” :class="{‘is-disabled’: !!item.disable}" :style=“item.itemStyle” v-for="(item, j) in child" :key=“j” @click=“handleNodeClick(item, i, j)”>
<text class="item-text">{{item.text}}</text>
<slot name="tag" :data="item"/>
<view class="check" v-if="selected.length > i && item.value == selected[i].value"></view>
</view>
在 uni-app
中使用 v-for
循环渲染带有 slot
的 Vue 自定义组件时,如果发现 slot
中的数据内容无效,通常是因为 slot
作用域的问题。slot
插槽分为默认插槽和作用域插槽两种,而作用域插槽可以传递数据给父组件模板使用。
以下是一个示例,展示如何在 uni-app
中正确使用 v-for
和作用域插槽来渲染带有 slot
的自定义组件,并确保 slot
中的数据内容有效。
1. 自定义组件(MyComponent.vue)
<template>
<view>
<slot :item="item"></slot>
</view>
</template>
<script>
export default {
name: 'MyComponent',
props: {
item: {
type: Object,
required: true
}
}
}
</script>
2. 父组件(ParentComponent.vue)
<template>
<view>
<my-component
v-for="(item, index) in items"
:key="index"
:item="item"
>
<template #default="{ item }">
<view>
<text>{{ item.name }}</text>
<text>{{ item.value }}</text>
</view>
</template>
</my-component>
</view>
</template>
<script>
import MyComponent from './MyComponent.vue';
export default {
components: {
MyComponent
},
data() {
return {
items: [
{ name: 'Item 1', value: 'Value 1' },
{ name: 'Item 2', value: 'Value 2' },
{ name: 'Item 3', value: 'Value 3' }
]
};
}
}
</script>
关键点解析
- 自定义组件:在
MyComponent.vue
中,我们定义了一个slot
并将其item
属性传递给slot
。 - 父组件:在
ParentComponent.vue
中,我们使用v-for
指令循环渲染MyComponent
,并通过作用域插槽 (<template #default="{ item }">
) 接收MyComponent
传递的item
数据。 - 作用域插槽:父组件的模板部分使用
#default
插槽语法来定义如何渲染MyComponent
的内容,并正确访问item
对象中的数据。
通过这种方式,我们可以确保在使用 v-for
循环渲染带有 slot
的自定义组件时,slot
中的数据内容是有效的。这个示例展示了如何在 uni-app
中正确地使用作用域插槽来传递数据,并避免数据内容无效的问题。