为什么在定义的数组上收到“ ERROR TypeError:无法读取未定义的属性'length'的信息”?

时间:2019-01-15 04:01:01

标签: javascript arrays angular typescript

我定义了数组,并对其进行了初始化(TWICE),但是在运行时出现“ ERROR TypeError:无法读取未定义的属性'length'的信息”。

我已经尝试检查数组是否已定义(如您在我的代码中看到的那样),但是angular仍然在诱骗我。 我已经尝试了所有解决方案,例如将sintax更改为“ filesToUpload && filesToUpload?.length> 0”或任何可能的组合,但是Angular在imo上无法正常工作。

component.html文件

<ng-container *ngIf="undefined !== filesToUpload && filesToUpload.length > 0">
  <button (click)='uploadImages()' 
           class="btn btn-success" 
           type="button">
          <i class="fas fa-upload"></i>Upload
  </button>

  <button (click)='cancelUpdate()' 
          class="btn btn-danger" 
          type="button">Cancel</button>
</ng-container>

这是我的component.ts文件

export class ImageGalleryUploadComponent implements OnInit 
{
  filesToUpload: File[] = [];
  ngOnInit() {
    this.filesToUpload = []
  }
}

这是一个有角度的错误吗?还是与组件生命周期有关?

3 个答案:

答案 0 :(得分:1)

尝试此操作,在将undefined分配给Array对象的地方。

<ng-container *ngIf="filesToUpload && filesToUpload != 'undefined' && filesToUpload.length > 0">

尽管这不是一个好习惯,但只需尝试一次,如果确认,则交叉检查代码。

答案 1 :(得分:0)

使用安全的导航运算符尝试这种方式,它将一次性处理null和lentgh文件,

<ng-container *ngIf="filesToUpload && filesToUpload?.length > 0">

答案 2 :(得分:0)

只需执行一次,就像:

export class ImageGalleryUploadComponent implements OnInit 
{
  filesToUpload: File[] = [];
}

我也遇到了这个问题。从ngOnInit中删除重新初始化应该可以解决此问题。并且不必担心每次组件初始化时都会将其设置为[]