首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误长度:无法读取在Object.updateDirectives处未定义的属性‘TypeError’

错误长度:无法读取在Object.updateDirectives处未定义的属性‘TypeError’
EN

Stack Overflow用户
提问于 2019-07-24 21:56:45
回答 1查看 2.3K关注 0票数 0

我有一个angular 8应用程序。如果加载了某个组件,我会得到一个错误

无法读取未定义的属性'length‘

我在谷歌上搜索了很多,还做了一些教程。但我不知道该如何处理这个bug。

所以如果我加载这个组件:

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { HealthAPIService } from '../../shared/health-api/health-api.service';

import { DossierEntry } from '../../interfaces/dossier/dossier-entry.interface';

@Component({
  selector: 'app-dossier-correspondence',
  templateUrl: './dossier-correspondence.component.html',
})

export class DossierCorrespondenceComponent implements OnInit {
  allCorrespondence: Array<DossierEntry>;
  correspondenceEntries: Array<DossierEntry>;
  attachmentEntries: Array<DossierEntry>;
  message = '';
  emptyMessage = 'Geen correspondentie.';
  errorMessage = 'Er ging iets mis met de connectie. Probeer over enkele minuten nogmaals.';

  correspondenceLoaded = false;
  showingSingle = false;

  single: DossierEntry;

  constructor(private healthAPIService: HealthAPIService) {}

  handleCorrespondenceLoad(result) {
    if (result &&  result.length === 0) {
      this.message = this.emptyMessage;
      return;
    }
    this.allCorrespondence = result;
    this.attachmentEntries = [];
    this.correspondenceEntries = [];
    for (let entry of result) {
      switch (entry.type) {
        case 'correspondence': {
          this.correspondenceEntries.push(entry);
          break;
        }
        case 'attachments': {
          this.attachmentEntries.push(entry);
          break;
        }
        default: {
          console.log('Dossier correspondence heeft een invalide entry soort teruggegeven');
          break;
        }
      }
    }
  }

  gotoItem(index, type: string) {
    this.showingSingle = true;
    // this.single = this.allCorrespondence[index];
    switch (type) {
      case 'correspondence': {
        this.single = this.correspondenceEntries[index];
        break;
      }
      case 'attachments': {
        this.single = this.attachmentEntries[index];
        break;
      }
      default: {
        console.log('Er is op een ongeldige soort dossier entry geklikt');
        break;
      }
    }
  }

  goBack(event) {
    this.showingSingle = false;
  }

  ngOnInit() {
    this.healthAPIService.getDossierEntry('correspondence').subscribe(result => {
      console.log(result);
      this.handleCorrespondenceLoad(result), (this.correspondenceLoaded = true);
    }, msg => (this.message = this.errorMessage));
  }
}

然后我会得到这个错误:

代码语言:javascript
复制
dossier-correspondence.component.html:6 ERROR TypeError: Cannot read property 'length' of undefined
    at Object.updateDirectives (dossier-correspondence.component.html:8)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:30537)
    at checkAndUpdateView (core.js:29933)
    at callViewAction (core.js:30174)
    at execComponentViewsAction (core.js:30116)
    at checkAndUpdateView (core.js:29939)
    at callViewAction (core.js:30174)
    at execEmbeddedViewsAction (core.js:30137)
    at checkAndUpdateView (core.js:29934)
    at callViewAction (core.js:30174)

在这一行上:

代码语言:javascript
复制
<app-is-loading *ngIf="!correspondenceLoaded" message="Correspondentie wordt geladen"></app-is-loading>

下面是app- is -loading组件的代码:

代码语言:javascript
复制
export class IsLoadingComponent implements OnInit {
  @Input() message: string;

  public text: string;

  constructor() {}

  ngOnInit() {
    this.text = this.message + '...';
  }
}

谢谢

现在也使用html文件:

代码语言:javascript
复制
<app-vital10-page [noTopBar]="true">
<h2 class="section-header">Correspondentie</h2>

<p class="data-entry" *ngIf="!allCorrespondence">{{ message }}</p>

<app-is-loading *ngIf="!correspondenceLoaded" message="Correspondentie wordt geladen"></app-is-loading>

<div *ngIf="!showingSingle && correspondenceEntries.length > 0">
  <div class="main-row main-row-dossier">
    <section class="data-entry">
      <h3 class="dossier-header">Algemeen</h3>
      <table class="dossier-table">
        <thead class="dossier-tableheader">
          <tr>
            <th class="dossier-tablehead fixed-one-fifth">Datum</th>
            <th class="dossier-tablehead fixed-four-fifths">Onderwerp</th>
          </tr>
        </thead>
        <tbody class="dossier-tablebody">
          <tr class="dossier-correspondencerow" *ngFor="let entry of correspondenceEntries; let i = index" (click)="gotoItem(i, entry.type)">
            <td>{{ entry.date | date:"dd-MM-y" }}</td>
            <td>{{ entry.name }}</td>
          </tr>
        </tbody>
      </table>
    </section>
  </div>
</div>

<div *ngIf="!showingSingle && attachmentEntries.length > 0">
  <div class="main-row main-row-dossier">
    <section class="data-entry">
      <h3 class="dossier-header">Bijlage</h3>
      <table class="dossier-table">
        <thead class="dossier-tableheader">
        <tr>
          <th class="dossier-tablehead fixed-one-fifth">Datum</th>
          <th class="dossier-tablehead fixed-four-fifths">Onderwerp</th>
        </tr>
        </thead>
        <tbody class="dossier-tablebody">
        <tr class="dossier-correspondencerow" *ngFor="let entry of attachmentEntries; let i = index" (click)="gotoItem(i, entry.type)">
          <td>{{ entry.date | date:"dd-MM-y" }}</td>
          <td>{{ entry.name }}</td>
        </tr>
        </tbody>
      </table>
    </section>
  </div>
</div>

<app-dossier-correspondence-item
  [item]="single"
  (goBack)="goBack($event)"
  *ngIf="showingSingle">
</app-dossier-correspondence-item>
</app-vital10-page>

但之后我会得到下面这行的错误:

代码语言:javascript
复制
<div *ngIf="!showingSingle && correspondenceEntries && correspondenceEntries.length > 0">

html文件现在看起来像这样:

代码语言:javascript
复制
<app-vital10-page [noTopBar]="true">
<h2 class="section-header">Correspondentie</h2>

<p class="data-entry" *ngIf="!allCorrespondence">{{ message }}</p>

<app-is-loading *ngIf="!correspondenceLoaded" message="Correspondentie wordt geladen"></app-is-loading>

<div *ngIf="!showingSingle && correspondenceEntries && correspondenceEntries.length > 0">
  <div class="main-row main-row-dossier">
    <section class="data-entry">
      <h3 class="dossier-header">Algemeen</h3>
      <table class="dossier-table">
        <thead class="dossier-tableheader">
          <tr>
            <th class="dossier-tablehead fixed-one-fifth">Datum</th>
            <th class="dossier-tablehead fixed-four-fifths">Onderwerp</th>
          </tr>
        </thead>
        <tbody class="dossier-tablebody">
          <tr class="dossier-correspondencerow" *ngFor="let entry of correspondenceEntries; let i = index" (click)="gotoItem(i, entry.type)">
            <td>{{ entry.date | date:"dd-MM-y" }}</td>
            <td>{{ entry.name }}</td>
          </tr>
        </tbody>
      </table>
    </section>
  </div>
</div>

<div *ngIf="!showingSingle && attachmentEntries.length > 0">
  <div class="main-row main-row-dossier">
    <section class="data-entry">
      <h3 class="dossier-header">Bijlage</h3>
      <table class="dossier-table">
        <thead class="dossier-tableheader">
        <tr>
          <th class="dossier-tablehead fixed-one-fifth">Datum</th>
          <th class="dossier-tablehead fixed-four-fifths">Onderwerp</th>
        </tr>
        </thead>
        <tbody class="dossier-tablebody">
        <tr class="dossier-correspondencerow" *ngFor="let entry of attachmentEntries; let i = index" (click)="gotoItem(i, entry.type)">
          <td>{{ entry.date | date:"dd-MM-y" }}</td>
          <td>{{ entry.name }}</td>
        </tr>
        </tbody>
      </table>
    </section>
  </div>
</div>

<app-dossier-correspondence-item
  [item]="single"
  (goBack)="goBack($event)"
  *ngIf="showingSingle">
</app-dossier-correspondence-item>
</app-vital10-page>

出现以下错误:

代码语言:javascript
复制
dossier-correspondence.component.html:8 ERROR TypeError: Cannot read property 'length' of undefined
    at Object.updateDirectives (dossier-correspondence.component.html:30)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:30537)
    at checkAndUpdateView (core.js:29933)
    at callViewAction (core.js:30174)
    at execComponentViewsAction (core.js:30116)
    at checkAndUpdateView (core.js:29939)
    at callViewAction (core.js:30174)
    at execEmbeddedViewsAction (core.js:30137)
    at checkAndUpdateView (core.js:29934)
    at callViewAction (core.js:30174)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-24 22:26:10

尝试将模板片段从

代码语言:javascript
复制
<app-is-loading *ngIf="!correspondenceLoaded" message="Correspondentie wordt geladen"></app-is-loading>

<div *ngIf="!showingSingle && correspondenceEntries.length > 0">

代码语言:javascript
复制
<app-is-loading *ngIf="!correspondenceLoaded" message="Correspondentie wordt geladen"></app-is-loading>

<div *ngIf="!showingSingle && correspondenceEntries && correspondenceEntries.length > 0">

您似乎正在尝试访问correspondenceEntries.length,而它仍未定义

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57184666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档