uni-app 在app端数据列表组件封装后从B页面删除数据返回A页面无法再进行事件响应
uni-app 在app端数据列表组件封装后从B页面删除数据返回A页面无法再进行事件响应
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 企业版 LTSC | HBuilderX |
产品分类:uniapp/App
测试过的手机:
- iPhone 8 系统版本14.5
- realemeQ3 系统版本Android 11
示例代码:
<p>A页面:</p>
<pre><code><template>
<view>
<list-item v-for="item in typeList" :key="item.id" :objc="item" @click="test"> </list-item>
<view>
</template>
test(){
let url = ....
const self = this;
uni.navigateTo({
url: url,
events: {
getCurrentKey(data) {
const {
key
} = data;
const index = self.typeList.findIndex(item =>item.id== parseInt(key));
if (index != -1) {
self.typeList.splice(index, 1)
console.log("删除后", self.typeList)
// 此时无法点击 item了
}
}
}
})
}
</code></pre>
更多关于uni-app 在app端数据列表组件封装后从B页面删除数据返回A页面无法再进行事件响应的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
已确认,已加分,后续优化
更多关于uni-app 在app端数据列表组件封装后从B页面删除数据返回A页面无法再进行事件响应的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个bug有修复吗?很影响使用。。。
这是一个典型的页面通信和组件状态更新问题。当从B页面删除数据返回A页面后,组件的事件响应失效通常是由于以下原因:
- 数据响应式丢失:直接使用
splice修改数组后,Vue的响应式系统可能未能正确触发组件更新 - 事件监听器失效:组件重新渲染过程中事件绑定可能出现问题
解决方案:
// 在A页面中修改
getCurrentKey(data) {
const { key } = data;
const index = this.typeList.findIndex(item => item.id == parseInt(key));
if (index != -1) {
// 使用Vue.set或重新赋值确保响应式
this.typeList.splice(index, 1);
// 强制重新赋值触发响应式更新
this.typeList = [...this.typeList];
console.log("删除后", this.typeList);
}
}
替代方案:使用页面通信
// A页面
test(){
uni.navigateTo({
url: url,
events: {
getCurrentKey: (data) => {
this.handleDelete(data.key);
}
}
});
},
handleDelete(key){
this.typeList = this.typeList.filter(item => item.id !== parseInt(key));
}
推荐做法:使用Vuex进行状态管理
// store中管理数据
deleteListItem(id) {
const index = this.state.typeList.findIndex(item => item.id === id);
if (index !== -1) {
this.state.typeList.splice(index, 1);
}
}

