vue3 uni-app uni-popup 组件 slot插槽 prop传值数据 改变,内容就消失了
vue3 uni-app uni-popup 组件 slot插槽 prop传值数据 改变,内容就消失了
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 10 | HBuilderX |
uniapp/H5
示例代码:
<template>
<view class="content">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area" @click="popOpen">
<text class="title">{{title}}</text>
</view>
<ly-popup ref="popRef" :btnDis="btnDis"></ly-popup>
</view>
</template>
<script setup>
import { ref } from 'vue';
const title = ref('点击弹出测试弹窗')
const popRef = ref(null)
const btnDis = ref(true)
const popOpen = () => {
console.log(popRef.value)
popRef.value.openCommPop()
setTimeout(() => {
btnDis.value = false
}, 2000)
}
</script>
<template>
<uni-popup ref="popCommmRef" type="bottom">
<slot>
<view style="background-color: #FFFFFF;text-align: center;height: 200px;">
测试弹窗内容
<button type="primary" :disabled="props.btnDis">测按钮</button>
</view>
</slot>
</uni-popup>
</template>
<script setup>
import { ref } from 'vue';
const props = defineProps({
btnDis: false
})
const popCommmRef = ref(null)
const openCommPop = () => {
popCommmRef.value.open()
}
defineExpose({
openCommPop
})
</script>
操作步骤:
uni-popup 二次封装组件 使用插槽定义内容,prop传值,动态传入值, 父级改变值内容就消失了
预期结果:
动态改变值内容不消失
实际结果:
动态改变值内容就消失了
bug描述:
uni-popup 二次封装组件 使用插槽定义内容,prop传值,动态传入值, 父级改变值内容就消失了
更多关于vue3 uni-app uni-popup 组件 slot插槽 prop传值数据 改变,内容就消失了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
5 回复
更多关于vue3 uni-app uni-popup 组件 slot插槽 prop传值数据 改变,内容就消失了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我看到了,但是这不应该是组件的bug,修复组件吗?
回复 FE_liyangyang: 是的 但是官方修复bug的话 时间不确定 你可以等官方修复好在用 或者 用别的方法先解决问题
回复 爱豆豆: 嘻嘻,谢谢喽,我意思就是提交上去这个bug,官方啥时候修是他的事
这个问题是由于uni-popup组件在prop值变化时会重新渲染导致的。解决方法如下:
- 避免在slot内部直接使用props值,改为在组件内部处理:
<!-- 子组件修改 -->
<template>
<uni-popup ref="popCommmRef" type="bottom">
<view style="background-color: #FFFFFF;text-align: center;height: 200px;">
测试弹窗内容
<button type="primary" :disabled="innerBtnDis">测按钮</button>
</view>
</uni-popup>
</template>
<script setup>
import { ref, watch } from 'vue';
const props = defineProps({
btnDis: Boolean
})
const innerBtnDis = ref(props.btnDis)
watch(() => props.btnDis, (val) => {
innerBtnDis.value = val
})
</script>
- 或者使用v-if控制弹窗的显示隐藏,而不是依赖uni-popup的内部机制:
<!-- 父组件修改 -->
const popOpen = () => {
popRef.value.openCommPop()
// 改为在打开后再修改值
setTimeout(() => {
btnDis.value = false
}, 2000)
}