当前位置: 首页 > 知识库问答 >
问题:

mat-选择 在具有 800 个选项的选中中超出的最大调用堆栈大小

裴楚青
2023-03-14

我正在使用mat-select来填充下拉列表中的对象数组。有一个选项可以通过单击ALL来选择和取消选择所有值。为此,我将清空与其关联的窗体控件,并用于选择全部,使用所有 ID 填充窗体控件。对于小数据,它工作正常。对于超过800的数据,当我在取消选择al时清空表单控件时,它会抛出一个错误(在安全订阅者.push.中超过了最大调用堆栈大小。/node_modules/rxjs/_esm5/内部/订阅者.js.安全订阅者.js./node_modules/rxjs/_esm5/内部/订阅者.js安全订阅者下一个 (订阅者.js:130)

组件.html

 <mat-select [formControl]="courseFormControl" multiple aria-label="Course Name"
          [(ngModel)]="selectedCourseIds">
<mat-option *ngFor="let course of courseList"
           (onSelectionChange)="onCourseSelect($event,courseFormControl)">
            {{course.courseName}}
          </mat-option>
</mat-select>

组件.ts

 onCourseSelect(event, form) {
    if(event.isUserInput) {
  let listCourseId =  [];
//data contains the total list
              data.map((val,ind) => {
                if(val.selected === true){
                  listCourseId.push(val.courseId)
                }
              });
          this.selectedCourseIds = listCourseId;

          this.courseFormControl.setValue(listCourseId);
}

取消全部选择时出现错误

core.js:15724错误范围错误:SafeSubscriber.push超过了最大调用堆栈大小../node _ modules/rxjs/_ es M5/internal/subscriber . js . safe subscriber . _ _ tryOrUnsub(subscriber . js:200)../node _ modules/rxjs/_ es M5/internal/subscriber . js . safe subscriber . next(subscriber . js:130)at subscriber . push../node _ modules/rxjs/_ es M5/internal/subscriber . js . subscriber . _ next(subscriber . js:76)at subscriber . push..EventEmitter.push上的/node _ modules/rxjs/_ es M5/internal/subscriber . js . subscriber . next(subscriber . js:53)..EventEmitter.push上的/node _ modules/rxjs/_ es M5/internal/subject . js . subject . next(subject . js:47)../node _ modules/@ angular/core/Fe sm5/core . js . event emitter . emit(core . js:13499)../node _ modules/@ angular/material/es M5/core . es5 . js . ma option . _ emitSelectionChangeEvent(core . es5 . js:2803)at ma option . push../node _ modules/@ angular/material/es M5/core . es5 . js . ma option . deselect(core . es5 . js:2595)

共有1个答案

祁建业
2023-03-14

问题是我们什么时候直接给mat-select组件赋值。因此,与其将值直接推入formControl,不如使用mat-select API来取消选择该选项。

请尝试以下操作:

组件.html

<mat-select [formControl]="courseFormControl" multiple aria-label="Course Name" [(ngModel)]="selectedCourseIds" #matSelect>
  <mat-option *ngFor="let course of courseList" (onSelectionChange)="onCourseSelect($event, courseFormControl)">
    {{ course.courseName }}
  </mat-option>
</mat-select>

组件.ts

@ViewChild('matSelect') matSelect;

deSelectAll(){
  this.matSelect.options.forEach((x) => {
      x.deselect();
  });
}
 类似资料:
  • 问题内容: 我有一台服务器,可能导致以下输出死亡: 但是,如果没有堆栈转储或跟踪,就无法确定这是无限递归还是只是链太大而已,更不用说问题函数在哪里了。 使用该选项运行Node 不仅使我的测试运行缓慢(正如人们期望的那样),而且没有重现该问题。 有人有任何解决方案或提示来深入了解此问题吗? 问题答案: 看来目前的答案是:站稳脚步,等待Node.js更新到新的V8版本,或者使用此Chromium项目错

  • 问题内容: 当我运行我的代码时,Node.js引发由过多的递归调用引起的异常。我试图将Node.js堆栈大小增加,但是Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将输出。是否有可能在不删除递归调用的情况下解决此问题? 问题答案: 您应该将递归函数调用包装到 , 要么 函数使node.js有机会清除堆栈。如果您不这样做,并且有很多循环没有任何 真正的 异步

  • 问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此:

  • 如果用户未登录,我尝试将用户重定向到“TrapPage”。 这是我的代码: 当我将函数requireAuth放在onEnter上时,控制台给我一个错误: 我是一个反应迟钝的人,请耐心点:) 我的代码有什么问题?

  • 在我的插座里。io应用程序,我正在尝试将房间中的一组用户发送到客户端,以便创建一个显示房间中所有用户的元素。文档中说,您可以使用以下代码返回给定命名空间和文件室中的所有套接字实例: 但是,它涉及到,这是我不太熟悉的。我只是把代码块放在一个函数中,我不确定这是最好的方法。 当我尝试运行此操作时,控制台中出现以下错误: 我试着对此做了一些研究,发现了这个答案,建议将代码包装在块中。我已经做到了: 但是

  • 我正在使用我岳父让我建立的一个网站作为学习React的借口。我不是一个天生的JavaScript开发人员(更喜欢后端),我知道我下面的代码中可能有一些递归元素,但我就是看不到。谁能告诉我我做错了什么?