You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 11 Modal判断数组是否存在指定值,二次打开时数组已赋值仍返回false

问题根因

你的isCourseSelected方法用Array.indexOf()判断对象是否存在,本质是比对内存引用地址:

  • 第一次打开弹窗时,选中的课程对象和modal里courses数组的对象是同一份引用,所以判断生效
  • 第二次打开弹窗时,你重新从Firestore拉取了课程列表,每一条都用new Course().deserialize()生成了全新的对象,和父组件selectedCourses里存的旧对象引用完全不同,所以就算id完全一致,indexOf也会返回-1
修复方案
  1. 首先修改CoursesModalComponent中的isCourseSelected方法,改用课程唯一id做比对,不需要依赖对象引用:
public isCourseSelected(course: Course) {
  // 用id匹配代替引用匹配
  return this.modalSelectedCourses.some(cur => cur.id === course.id);
}
  1. (可选优化)修正modal初始状态的获取方式:ngx-bootstrap的modal会自动把initialState里的属性赋值给模态框组件的同名属性,不需要手动从modalService.config取,构造函数里可以删掉对应行,避免取值错误:
// 删掉构造函数里的这行代码
// this.modalSelectedCourses = this.modalService.config.initialState['modalSelectedCourses'];
  1. (可选优化)避免父组件selectedCourses被意外修改:你现在把selectedCourses直接引用传给了modal,modal里修改modalSelectedCourses会直接改动父组件的数组,建议传深拷贝或者严格走单向数据流,由父组件统一维护选中状态。

内容的提问来源于stack exchange,提问作者Jeoxs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:15:04