首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JSON对象键值对分别绑定到angular模板

如何将JSON对象键值对分别绑定到angular模板
EN

Stack Overflow用户
提问于 2019-02-21 18:21:17
回答 4查看 15.3K关注 0票数 1

我有一个来自API的动态json,如下所示:

代码语言:javascript
复制
 {123: "Mumbai", 456: "Bangalore", 789: "Chennai", 101: "Andhra",...}

我在我的模板中编写了下面的HTML代码,其中我从assets文件夹中获得了image-1,image-2徽标

代码语言:javascript
复制
  <div class="row">
    <div class="col-6" (click)="cityClick('Bangalore')">
      <div class="img-1">
        // my image-1 logo goes here
      </div>
      <div class="img-text">
        Bangalore
      </div>
    </div>
    <div class="col-6" col-6 (click)="cityClick('Mumbai')">
      <div id="image_block" class="img-2">
        // my image-2 logo goes here
      </div>
      <div id="text_block" class="img-text">
        Mumbai
      </div>
    </div>
  </div>

如何在点击图片时获取json的key,并从对应的key-value中显示图片下方的文本。当我单击时,我应该能够在单击事件中传递键和文本。请帮帮忙,因为我是Angular的新手!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-02-21 18:39:06

首先,将此JSON转换为JavaScript/TypeScript数组,如下所示:

代码语言:javascript
复制
var json = {123: "Mumbai", 456: "Bangalore", 789: "Chennai", 101: "Andhra" };

var jsonToBeUsed = [];

for (var type in json) {
    item = {};
    item.key = type;
    item.value = json[type];
    jsonToBeUsed.push(item);
}

这将产生如下所示的数据:

现在使用模板中的NgFor绑定数组。(请参阅NgFor的this )

代码语言:javascript
复制
<div class="row">
    <div *ngFor="let item of array">
         <div class="col-6" (click)="cityClick(item)">
              <div class="img-1">
                // my image-1 logo goes here
              </div>
              <div class="img-text">
                {{item.value}}
              </div>
        </div>
    </div>
</div>

我们已经在click事件中传递了整个对象。您可以从click事件处理程序中的对象中读取任何所需的属性,单击事件处理程序将写入组件中。

对于您的特殊需求,您可以使用以下标记:

代码语言:javascript
复制
<div class='row' *ngFor='let index of array; let i = index; let even = even'>
    <div *ngIf="even" class='col-6' (click)="cityClick(array[i])">
        <div class="img-1">
            // my image-1 logo goes here
        </div>
        <div class="img-text">
            {{array[i].value}}
        </div>
    </div>
    <div *ngIf="!even" class='col-6' (click)="cityClick(array[i])">
        <div class="img-1">
            // my image-1 logo goes here
        </div>
        <div class="img-text">
            {{array[i].value}}
        </div>
    </div>
</div>
票数 5
EN

Stack Overflow用户

发布于 2019-02-21 18:42:46

在代码中使用下面的函数:

代码语言:javascript
复制
getKeyByValue(object, value) {
      return Object.keys(object).find(key => object[key] === value);
}

并将其用作

代码语言:javascript
复制
var dynamicJson = {123: "Mumbai", 456: "Bangalore", 789: "Chennai", 101: "Andhra"}

cityClick(value){
      var key = this.getKeyByValue(this.dynamicJson, value);
      console.log(key);
}
票数 0
EN

Stack Overflow用户

发布于 2019-02-21 18:44:39

代码语言:javascript
复制
{123: "Mumbai", 456: "Bangalore", 789: "Chennai", 101: "Andhra",...}

你对那个JSON有影响吗?对我来说,这看起来很像是一个设计问题。我假设这些数字是id的。我认为像这样的东西应该更好:

代码语言:javascript
复制
[{id: "123", name: "Mumbai"}, {id: "456", name: "Bangalore"}, {id: "789", name: "Chennai"}, {id: "101", name: "Andhra"},...}]

在这种情况下,您将收到一个城市数组,它可能是一个要解析的接口。

代码语言:javascript
复制
export interface City {
   id: string;
   name: string;
} 

您可以使用*ngFor轻松地在html中呈现它

代码语言:javascript
复制
<div *ngFor="let city of cities">
     <!--do something with city.id and city.name-->
   </div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54804675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档