首页 > 解决方案 > 角度“未定义标识符‘todos’。”

问题描述

什么可能是这个错误的原因

“未定义标识符‘todos’。组件声明、模板变量声明、元素引用都可以

我一直在尝试在 ionic4 中运行它,将其链接到 firebase,并且在 (12,36) 和 (9,41) 的各个行上都会出现此错误。

<ion-header>
          <ion-toolbar color="primary">
            <ion-title>
              Ionic FireStore
            </ion-title>
          </ion-toolbar>
        </ion-header>

        <ion-content>

          <ion-list>
            <ng-container *ngIf="!todos || todos.length == 0">
              <div *ngFor="let n of [0,1,2]" padding>
                <p>
                  <ion-skeleton-text class="fake-skeleton"></ion-skeleton-text>
                </p>
              </div>
            </ng-container>
          <ion-item-sliding *ngFor="let item of todos">
            <ion-item lines="inset" button[routeLink]=" ['/details, item.id'] ">
              <ion-label>
                {{item.task}
              <p>{{ item.createdAt | date:'short'}} </p>
              </ion-label>
              <ion-note slot="end" color="primary"> {{ item.priority }} </ion-note>

            </ion-item>
            <ion-item-options side="end">
              <ion-icon name="checkmark" slot="end"></ion-icon>
            </ion-item-options>
          </ion-item-sliding>
          </ion-list>

          <ion-fab vertical="bottom" horizontal="end" slot="fixed">
            <ion-fab-button routerLink="/details" routerDirection="forward">
              <ion-icon name="add"></ion-icon>
            </ion-fab-button>

          </ion-fab>

    </ion-content>

标签: angular

解决方案


'todos' 没有定义。

这是一个 Javascript 错误。它说你还没有定义变量todos

您很可能有一个包含所描述HTML的组件

您可以尝试以下...

...in component
todos;
constructor()...

或者

...in component
todos = [];
constructor()...

附带说明...

打开浏览器控制台并输入: todos;

你回来了:“Uncaught ReferenceError: todos is not defined”

类型:var todos;

你回来了:“未定义”

看到不同?“已定义” todos 变量的“未定义”引用了未定义的右手赋值;即它没有定义附加到已定义的todos。这有点令人困惑。

所有变量必须在使用前定义。当您在 javascript 类中定义变量时,我们省略了 var/let 并仅将其声明为

class Todo {
  todos;

  constructor(){}
}

声明了todos变量。左边的赋值是 todos,右边是默认的undefined,因为没有提供任何东西。undefined指向右侧,而不是左侧。在使用任何变量之前,我们必须始终提供左侧赋值。

您正在使用“!todos || todos.length == 0”

!todos 表示有一个已定义的变量 todos 具有错误的右侧赋值:false、0、""、null、NaN 或 undefined。然后您使用BANG运算符来翻转逻辑。在任何情况下,您都必须在适当的范围内定义变量todos 。


推荐阅读