当前位置: 首页 > 知识库问答 >
问题:

以角度[重复]在对象上迭代

邓声
2023-03-14

我试图在Angular 2 Alpha 28中做一些事情,并且对字典和ngFor有问题。

我在TypeScript中有一个界面,如下所示:

interface Dictionary {
    [index: string]: string
}

在JavaScript中,这将转换为具有数据的对象,该对象可能看起来像这样:

myDict={'key1':'value1','key2':'value2'}

我想重复一下,并尝试了以下方法:

<div *ngFor="(#key, #value) of myDict">{{key}}:{{value}}</div>

但是,以下任何一项都不起作用:

<div *ngFor="#value of myDict">{{value}}</div>
<div *ngFor="#value of myDict #key=index">{{key}}:{{value}}</div>

在所有情况下,我都会收到错误,例如意外标记找不到“iterableDiff”管道支持对象

我错过了什么?这再也不可能了吗?(第一个语法在Angular 1. x中工作)或者迭代对象的语法不同?

共有3个答案

桂玉石
2023-03-14

试试用这个管子

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'values',  pure: false })
export class ValuesPipe implements PipeTransform {
  transform(value: any, args: any[] = null): any {
    return Object.keys(value).map(key => value[key]);
  }
}

<div *ngFor="#value of object | values"> </div>
巫马望
2023-03-14

他们似乎不想支持ng1的语法。

根据Miško Hevery(参考文献):

贴图在键中没有顺序,因此它们是不可预测的。这在ng1中得到了支持,但我们认为这是一个错误,在NG2中将不受支持

计划是有一个maptoIterable管道

因此,为了在对象上迭代,您需要使用“管道”。目前还没有实现这样的管道。

作为一种解决方法,这里有一个迭代键的小例子:

组成部分:

import {Component} from 'angular2/core';

@Component({
  selector: 'component',
  templateUrl: `
       <ul>
       <li *ngFor="#key of keys();">{{key}}:{{myDict[key]}}</li>
       </ul>
  `
})
export class Home {
  myDict : Dictionary;
  constructor() {
    this.myDict = {'key1':'value1','key2':'value2'};
  }

  keys() : Array<string> {
    return Object.keys(this.myDict);
  }
}

interface Dictionary {
    [ index: string ]: string
}

於炯
2023-03-14

使用内置的keyvalue-管道,如下所示:

<div *ngFor="let item of myObject | keyvalue">
    Key: <b>{{item.key}}</b> and Value: <b>{{item.value}}</b>
</div>

或者像这样:

<div *ngFor="let item of myObject | keyvalue:mySortingFunction">
    Key: <b>{{item.key}}</b> and Value: <b>{{item.value}}</b>
</div>

其中mySortingFunction位于.ts文件中,例如:

mySortingFunction = (a, b) => {
  return a.key > b.key ? -1 : 1;
}

Stackblitz:https://stackblitz.com/edit/angular-iterate-key-value

您不需要在任何模块中注册它,因为Angular管道在任何模板中都可以开箱即用。

它也适用于Javascript地图。

 类似资料:
  • 好的,我有这个 我一直在试着把它显示在视图中。 因为它不是一个json数组,所以angular只是使用 null 编辑 下面是完整的json

  • 我有一个要迭代通过的JSON对象。 我正在使用映射这些值,我认为这是处理对象的正确方法: 但是,当我希望对象返回时,上面的返回以下内容: 为什么它返回的是值,而不是对象?

  • 问题内容: 所以我有一个json,我试图只获取活动用户的所有统计信息。当我尝试在for循环中执行以下操作时 它不起作用…但是只要没有记录,只要没有for循环就可以正常工作 这是我的html 这是我的js 这是一个演示链接http://jsfiddle.net/4kzzy/174/ 问题答案: 没什么复杂的,只是语法错误。 for循环需要这样写: 即没有多余的,没有多余的,也没有内部。 参见http

  • 问题内容: 我想知道是否需要避免在创建一个带有嵌入式对象数组的简单对象时复制对对象的引用。情况如下:我有一个接受JSON并应用一些逻辑然后将对象存储在其中的服务器D B。可以说,我的表单用于保存DB中的团队。服务器接受team作为json。团队有一个TeamMember对象数组,我的表单有一个简单的字段来输入团队成员信息并将其添加到团队teamMembers数组中。现在这是一个问题,当我向数组列表

  • 如何迭代对象及其子对象的属性?我在中使用了,但无法获取歌曲信息:/

  • 我有一个目标: 我如何在我的组件Tempate中迭代这个项目?我试过: