角“未定义标识符'todos'。”

时间:2018-11-13 16:54:28

标签: angular

该错误的可能原因

  

“标识符'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>

2 个答案:

答案 0 :(得分:0)

  

'todos'未定义。

这是Javascript错误。它表示您尚未定义变量 todos

您很可能具有包含描述的 HTML 组件

您可以尝试以下操作...

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

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

旁注...

打开浏览器控制台,然后键入:todos;

您回来:“未捕获的ReferenceError:未定义todos”

类型:var todos;

您回来:“未定义”

看到区别了吗? “已定义” todos变量的“未定义”引用了未定义的右侧分配;也就是说,它与定义的 todos 无关。有点混乱。

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

class Todo {
  todos;

  constructor(){}
}

todos 变量被声明。左侧是待办事项,右侧是默认的 undefined ,因为未提供任何内容。 undefined 指向右侧,而不是左侧。在使用任何变量之前,我们必须始终提供左侧分配。

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

!todos意味着存在一个已定义的变量todos,该变量的falsey右侧分配为false,0,“”,null,NaN或undefined。然后,您使用 BANG 运算符来翻转逻辑。无论如何,您必须在适当的范围内定义变量 todos

答案 1 :(得分:0)

我想你在这里回答了自己:

<ng-container *ngIf="!todos || todos.length == 0">

如果未定义待办事项,该ng容器不应显示!

现在,您在该ng容器之外:

<ion-item-sliding *ngFor="let item of todos">

您也应该在这里添加ng-container中的代码,这样您将获得以下内容:

<ng-container *ngIf="!todos || todos.length == 0">
   <ion-item-sliding *ngFor="let item of todos">
</ng-container>

然后,如果待办事项未定义,那么离子项目滑动也不会显示!