该错误的可能原因
“标识符'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>
答案 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>
然后,如果待办事项未定义,那么离子项目滑动也不会显示!