- 发布:2022-10-12 18:08
- 更新:2022-10-27 21:03
- 阅读:588
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 12.5
HBuilderX类型: 正式
HBuilderX版本号: 3.6.4
手机系统: 全部
手机厂商: 华为
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
App下载地址或H5⽹址: https://vkceyugu.cdn.bspapp.com/VKCEYUGU-6e7b238c-0a61-4c73-a0fe-4ac471fc85ce/6acce671-2821-4954-bb30-1e6ea043a452.apk
测试过的手机:
示例代码:
A页面代码(列表页面)
<template>
<view class="content">
<block v-for="item in test" :key="item.sellId">
<item @click="handlerClick(item)" :title="item.title">
</item>
</block>
</view>
</template>
<script>
import item from './components/item.vue'
export default {
components: {
item,
},
data() {
return {
test: [{
sellId: '1',
name: '名称1',
title: '标题1',
},
{
sellId: '2',
name: '名称2',
title: '标题2',
},
{
sellId: '3',
name: '名称3',
title: '标题3',
},
{
sellId: '4',
name: '名称4',
title: '标题4',
},
]
}
},
onLoad() {
uni.$on('item-test', this.updateData)
},
methods: {
updateData({
sellId
}) {
console.log('on-sellId', sellId)
const selectIdx = this.test.findIndex((v) => v.sellId === sellId)
if (selectIdx === -1) return
this.test.splice(selectIdx, 1)
},
handlerClick(item) {
console.log('item', item)
const url = `/pages/index/detail?id=${item.sellId}`
uni.navigateTo({
url,
})
}
}
}
</script>
B页面代码(详情页面)
<template>
<view class="detail">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="id">sellId是{{id}}</text>
</view>
<view class="text-area" @click="handlerBack">
<text class="id">emit通信,点击回退上个页面,带sellId回去</text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
id: ''
}
},
onLoad(options) {
const {
id = ''
} = options || {}
console.log('id,', id)
this.id = id
},
methods: {
handlerBack() {
uni.$emit('item-test', {
sellId: this.id
})
uni.navigateBack()
}
}
}
</script>
A页面组件代码
<template>
<view class="item" @click="handlerClick">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
</view>
</template>
<script>
export default {
name: 'item',
props: {
title: {
type: String,
default: '',
},
},
methods: {
handlerClick() {
console.log('components-click')
this.$emit('click')
},
},
}
</script>
A页面代码(列表页面)
<template>
<view class="content">
<block v-for="item in test" :key="item.sellId">
<item @click="handlerClick(item)" :title="item.title">
</item>
</block>
</view>
</template>
<script>
import item from './components/item.vue'
export default {
components: {
item,
},
data() {
return {
test: [{
sellId: '1',
name: '名称1',
title: '标题1',
},
{
sellId: '2',
name: '名称2',
title: '标题2',
},
{
sellId: '3',
name: '名称3',
title: '标题3',
},
{
sellId: '4',
name: '名称4',
title: '标题4',
},
]
}
},
onLoad() {
uni.$on('item-test', this.updateData)
},
methods: {
updateData({
sellId
}) {
console.log('on-sellId', sellId)
const selectIdx = this.test.findIndex((v) => v.sellId === sellId)
if (selectIdx === -1) return
this.test.splice(selectIdx, 1)
},
handlerClick(item) {
console.log('item', item)
const url = `/pages/index/detail?id=${item.sellId}`
uni.navigateTo({
url,
})
}
}
}
</script>
B页面代码(详情页面)
<template>
<view class="detail">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="id">sellId是{{id}}</text>
</view>
<view class="text-area" @click="handlerBack">
<text class="id">emit通信,点击回退上个页面,带sellId回去</text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
id: ''
}
},
onLoad(options) {
const {
id = ''
} = options || {}
console.log('id,', id)
this.id = id
},
methods: {
handlerBack() {
uni.$emit('item-test', {
sellId: this.id
})
uni.navigateBack()
}
}
}
</script>
A页面组件代码
<template>
<view class="item" @click="handlerClick">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
</view>
</template>
<script>
export default {
name: 'item',
props: {
title: {
type: String,
default: '',
},
},
methods: {
handlerClick() {
console.log('components-click')
this.$emit('click')
},
},
}
</script>
操作步骤:
- A页面有一个数组,一共有4条数据,用封装好的一个组件进行for循环,然后点击列表的第一条数据,进入B页面。
- B页面点击回退到上个(A)页面,利用 emit 进行页面通信。
- 回到A页面,利用 on 监听到事件,进行A页面数组删除操作,把刚点击列表的第一条数据删除,利用 splice 进行删除。
- A页面第一条数据删除了,列表渲染未删除的三条数据。
- 列表渲染未删除的三条数据的点击事件无响应了。
- A页面有一个数组,一共有4条数据,用封装好的一个组件进行for循环,然后点击列表的第一条数据,进入B页面。
- B页面点击回退到上个(A)页面,利用 emit 进行页面通信。
- 回到A页面,利用 on 监听到事件,进行A页面数组删除操作,把刚点击列表的第一条数据删除,利用 splice 进行删除。
- A页面第一条数据删除了,列表渲染未删除的三条数据。
- 列表渲染未删除的三条数据的点击事件无响应了。
预期结果:
列表渲染未删除的三条数据点击事件正常操作。
列表渲染未删除的三条数据点击事件正常操作。
实际结果:
列表渲染未删除的三条数据的点击事件无响应了
列表渲染未删除的三条数据的点击事件无响应了
bug描述:
业务场景:
- 订单列表页面一共有4条数据,点击某一条可以进入订单详情页面。
- 详情页面可以进行删除此订单操作,删除此订单后,自动回退到订单列表页面。
- 回到订单列表,并且刷新订单列表页面数据,又继续回到第一步操作。
BUG问题是:
第三步后,列表渲染未删除数据的点击事件无响应了。