取消勾选复选框时selectedItemsList未正常返回全部列表的问题排查
问题根因
- 你在
Array.filter的回调中给this.selectedItemsList赋值的操作是无效的:filter方法最终会将回调返回true的元素组成新数组,赋值给this.selectedItemsList,会直接覆盖你在else分支里赋的完整列表值 - 回调函数在
isChecked为false的分支没有返回值,默认返回undefined会被filter判定为false,对应元素都会被过滤掉
修复方案
你要实现的「有勾选时返回勾选列表,无勾选时返回完整列表」可以调整为以下逻辑:
changeSelection() { this.checkedIDs = [] // 先单独过滤出所有勾选的条目 const checkedList = this.DisplayProductList.filter(value => value.isChecked === true) // 存在勾选内容就用勾选列表,全取消勾选就用完整的ProductData this.selectedItemsList = checkedList.length ? checkedList : this.ProductData this.router.navigate(['pipeline/cluster/policies']) this.sendclusteridApi() }
逻辑说明
- 先单独执行过滤逻辑,保证
filter只做列表过滤的单一功能,避免在回调中修改外部变量 - 后续判断选中列表的长度即可覆盖你需要的两种场景,逻辑清晰也不会出现赋值覆盖的问题
内容的提问来源于stack exchange,提问作者Mercy
相关产品推荐
相关产品推荐

