Angular-multiselect-dropdown-TypeError:无法读取未定义的属性“ length”

问题描述

  counter: number = 0;
  getDatatypes(){
    if(this.counter == 0) {
      if(this.appId != 0)
      {
        if(undefined != this.datatypes && this.datatypes.length)
          for (let i = 0; i < this.datatypes.length; i++) {
            this.applicationDataType = new ApplicationDataType(this.route.snapshot.params.id,this.datatypes[i].dataTypeId,this.datatypes[i].description,false);
            let datatype = this.checkedDatatypes.find(y => y.description === this.datatypes[i].description);
            if (datatype) {
              this.applicationDataType.checked = true;
              this.applicationDataTypes.push(this.applicationDataType);
            } else {
              this.applicationDataType.checked = false;
              this.applicationDataTypes.push(this.applicationDataType);
            }
        }
      } else {
        for(let i = 0; i < this.datatypes.length; i++){
          this.applicationDataType = new ApplicationDataType(this.route.snapshot.params.id,false);
          this.applicationDataTypes.push(this.applicationDataType);
        }
      }
      this.counter ++;
    }
  }

if(undefined != this.datatypes && this.datatypes.length)

是给TypeError: Cannot read property 'length' of undefined的人。

这是我遇到的控制台错误

enter image description here

这些错误对用户不可见,并且不影响功能。我已经尝试了所有方法,但是前端多选择下拉列表中的数据类型一直消失。我尝试初始化数据类型:Datatype [] = [],用if(this.datatypes && this.datatypes.length)包装for循环,并使用?。这些只是在运行前端时使多重选择下拉列表为空。

解决方法

似乎this.datatypes不是数组或其null,您可以使用?忽略此错误。

请将其更改为if(this.datatypes?.length>0)

,

您可以尝试以下操作吗?初始化dataTypes数组,然后使用forEach替换for循环

%

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...