- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在关注内容创建者 Paul Halliday 制作的 Ionic 教程。该项目是一个使用 Firebase 和 Angular 的购物 list 。
我的问题是,每当我运行该应用程序时,都会收到如下所示的错误:
Error: Uncaught (in promise): Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
我已尝试查看其他示例以了解如何修复我的代码,但它们似乎都不符合我的代码。
目前,我页面的 Ts 文件名为 shopping.ts
import { Component } from '@angular/core';
import { NavParams, NavController } from 'ionic-angular';
import { AddShoppingPage } from '../addshopping/addshopping';
import { AngularFireDatabase} from 'angularfire2/database';
import { Observable } from 'rxjs/Observable';
import { ShoppingItem } from 'src/models/shopping-item/shopping-item.interface';
@Component({
selector: 'page-shopping',
templateUrl: 'shopping.html'
})
export class ShoppingPage {
shoppingListRef$: Observable<ShoppingItem[]>;
constructor(public navCtrl: NavController,
public navParams: NavParams,
private database: AngularFireDatabase
) {
this.shoppingListRef$ = this.database.list('shopping-list').valueChanges();
}
navigate2AddShoppingPg() {
this.navCtrl.push(AddShoppingPage);
}
}
还有一个接口(interface)是我们通过ts文件定义的:
export interface ShoppingItem {
itemName: string;
itemNumber: number;
}
最后,我们购物页面的html是:
<ion-header>
<ion-navbar>
<ion-title>Shopping List</ion-title>
<ion-buttons end>
<button (click)="navigate2AddShoppingPg()">
<ion-icon name="add"></ion-icon>
</button>
</ion-buttons>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item *ngFor = "let item of shoppingListRef$">
<h2>Item Name: {{item.itemName}}</h2>
<h3>Quantity: {{item.itemNumber}}</h3>
</ion-item>
</ion-list>
</ion-content>
如有任何帮助,我们将不胜感激。谢谢!!
编辑 2 ~~三个月后~~我有一段时间没有访问过这个问题,但是为了避免误导那些寻求解决方案的人,是的,实际上支持异步管道。
最佳答案
你的 shoppingListRef$
不代表 Angular 的任何可迭代类型。这是Observable<ShoppingItem[]>
,而 Observable
本身是统一的。您要做的是迭代从可观察对象返回的值。尝试如下所示:
/* controller field */
listItems: ShoppingItem[] = [];
this.database.list('shopping-list').valueChanges()
.subscribe((v: ShoppingItem[]) => {
this.listItems = v.slice(0);
})
在模板中:
<ion-item *ngFor = "let item of listItems">
<h2>Item Name: {{item.itemName}}</h2>
<h3>Quantity: {{item.itemNumber}}</h3>
</ion-item>
如@user184994 所述,您也可以使用 async
在模板上,基本上在幕后将订阅可观察的并传递返回值。
需要注意的是,如果您希望 View 与数据保持同步,则可以不将此组件更改检测策略设置为 onPush
关于javascript - 错误 : Cannot find a differ supporting object '[object Object]' of type 'object' . NgFor 只支持绑定(bind)到 Iterables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51490945/
我有 Angular + Firebase 应用程序。在我的一个组件中,我从 Firebase DB 获取元素并使用 *ngFor 将它们绑定(bind)到模板中: {{ comment.te
以下场景在 javascript 中会很简单,但我在 Angular 中遇到了一些问题。 我有一个像这样的数组: array a = ( "id" = 0, name = random(), colu
我有一个由部分组成的 firebase json 对象。部分内部还有部分线程。我正在尝试迭代这些部分,然后迭代线程。问题是我收到此错误 InvalidPipeArgument:管道“AsyncPipe
我无法在任何地方找到对差异的准确描述。与 *ngIf 和 ngIf 相同 *ngFor的例子 和一个ngFor的例子 最佳答案 区别在于*ngFor转换为 ) 允
这是一个我想实际解决的示例问题。我们将非常感谢您的帮助。非常感谢! 最佳答案 除非将其中一项设置为变量,否则无法直接显示 *ngFor 之外的一项
我如何在 Angular 2 中使用 *ngFor 遍历多维数组。下面是我使用的 DOM 包装器: 0 }"> {{menuName.name}} Pages
标题可能看起来很奇怪,但我所说的基本上是this link。正在做。 我正在寻找一种方法来使用当前迭代的 person在在*ngFor之外范围。 在他使用的链接中 ng-repeat-start和 n
我有以下对象: itemList = { "0": [], "1": [], "2": [], "3": [] }; 我还有以下 *ngFor: 如您所
我试图在我的 Angular 应用程序中显示对话列表,然后在每个对话标题下显示这些不同对话中包含的消息。 这是我最新的代码- HTML: {{ conversation.conversat
我想从 *ngFor 中删除 *ngFor 中的项目。 当我删除回复“test2”时, 在我添加其他回复后,“test3”变为空。
在表头中,我有动态列和搜索排序功能。但对于特定的列,我需要禁用排序功能。在表中 {{colName}}
我是 Angular 2 的初学者。我正在尝试创建一个具有动态表单的表,创建了表并且还绑定(bind)了值但是我无法访问 formControlName 中的值,尝试了下面的代码但它没有用。 有人可以
我正在使用Flowbite(flowbite.com),这是一个Tailwind CSS插件,正如你在我的Angular项目中所知道的。。一切都工作得很好,除了当我调用一个抽屉按钮内的表,这是渲染与n
{{ recipe.name }} {{ recipe.description }} 由于这条消息,我不能在这
我如何使用 ngFor 循环遍历以下对象数组并仅获取月份的名称? { "Jan": { "name": "January", "short": "Jan", "number
我正在 Angular 6 中开发一个 Web 应用程序。我从 Firebase 收到一组对象,并尝试使用 ngFor 向用户显示详细信息。我的对象数组是这样的: export interface C
抱歉,我不能在这里发布所有代码。但是,如果你能给我一些关于需要做什么的提示,我将不胜感激。 让我试着解释一下我的困境。 所以,这是我一直在尝试使用的代码片段 ngFor和 ngIf上:
我正在用数组中的数据填充表格,我想将自定义输入集中在表格的最后一个元素上,所以我有这个: {{ a few table fields}}
我有来自服务器的以下 JSON 响应: stuff = [ { "_id":"59080892c88561d46736a18d", "name":"Miscellaneo
我使用以下方法创建了一个 Angular 库: ng new my-workspace --create-application=false cd 我的工作区 ng 生成库 my-lib 图书馆工作。
我是一名优秀的程序员,十分优秀!