【问题标题】:How to bind nested JSON objects in to a <ion-item> using ngfor如何使用 ngfor 将嵌套的 JSON 对象绑定到 <ion-item>
【发布时间】:2017-05-08 00:44:46
【问题描述】:

我正在尝试绑定 Firstbatting 对象,但该值未显示:

我想像这样访问 {{item.Firstbatting.Name}},你知道怎么做吗?

import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { PCAService } from '../../providers/pca-service';

@Component({
  selector: 'page-score-card',
  templateUrl: 'score-card-input.html',
  providers: [PCAService]
})
export class ScoreCardInputPage {

  selectedItem: any;
  public resultYear: any;
  public resultDate: any;
  public resultScoreCard: any;

  constructor(public navCtrl: NavController, public navParams: NavParams, private pcaService: PCAService) {
  this.selectedItem = navParams.get('item');
  this.GetMatchPlayedYears();
  }

    GetMatchPlayedYears(){
        console.log('Service Call from GetMatchPlayedYears() up coming ts');
        this.pcaService.GetMatchPlayedYears()
        .then(data => {
        this.resultYear = data;
      });
    }

    GetMatchDatesByYear(strYear){
      //NavController.name.disabled = false;
      this.selectedItem = strYear;
      console.log('Service Call from GetMatchDatesByYear(strYear) up coming ts');
      this.pcaService.GetMatchDatesByYear(strYear)
      .then(datedata => {
      this.resultDate = datedata;
    });
   }

    GetScorecard(MatchOID){
      this.selectedItem = MatchOID;
      console.log('Service Call from GetMatchDatesByYear(strYear) up coming ts');
      this.pcaService.GetScorecard(MatchOID)
      .then(scorecard => {
      this.resultScoreCard = scorecard;
    });
   }
}
<ion-header>
  <ion-navbar color="danger">
    <button ion-button menuToggle>
      <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title><h5>Score Card</h5></ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
<ion-list>
  <ion-item>
    <ion-label>Year</ion-label>
    <ion-select [(ngModel)]="Year" (ngModelChange)="GetMatchDatesByYear($event)">
      <ion-option *ngFor="let item of resultYear; let i = index" value={{item.Year}}>{{item.Year}}</ion-option>
    </ion-select>
  </ion-item>

  <ion-item>
    <ion-label>Date</ion-label>
    <ion-select  [(ngModel)]="Date" (ngModelChange)="GetScorecard($event)">
      <ion-option *ngFor="let item of resultDate; let i = index" value={{item.MatchOID}}>{{item.Date}}</ion-option>     
    </ion-select>
  </ion-item>
</ion-list>

<ion-list>
  <ion-item *ngFor="let item of resultScoreCard.FirstBatting;">
       <p><b>{{item.Name}}</b> </p>        
  </ion-item>
</ion-list>

<ion-list visible=false>
    <ion-item-divider >
      First Batting
    </ion-item-divider>
      <ion-item  *ngFor="let item of resultScoreCard.FirstBatting; let i = index">
          <p><b>{{item.Name}}</b></p>
      </ion-item>
</ion-list>
</ion-content>

下面是我的示例 Json 对象,这个对象代表板球记分卡,我想将这个对象绑定到像 Cricinfo.com 这样的记分卡格式

http://www.espncricinfo.com/big-bash-league-2016-17/engine/match/1023585.html

{
   "FirstBatting": [
      {
         "Balls": 1,
         "BowledBy": "Sathish Kumar Lingam",
         "BowledByOID": 0,
         "Duration": 0,
         "Fours": 0,
         "Name": "Vijayakumar Suryanarayanan",
         "OID": 600000000027,
         "OutBy": "",
         "OutByOID": 0,
         "Runs": 0,
         "Sixes": 0,
         "StrikeRate": 0,
         "wktDetails": "Bowled"
      },
      {
         "Balls": 25,
         "BowledBy": "Sriram Venkatraman",
         "BowledByOID": 600000000000,
         "Duration": 0,
         "Fours": 0,
         "Name": "Rajesh Vinayagam",
         "OID": 600000000013,
         "OutBy": "Amalan Nagarajan",
         "OutByOID": 600000000000,
         "Runs": 21,
         "Sixes": 0,
         "StrikeRate": 0,
         "wktDetails": "Caught"
      }
   ],
   "FirstBattingDetailsBallByBall": [],
   "FirstBowling": [],
   "FirstBowlingDetailsOverbyOver": [],
   "FirstInningsSummary": {},
   "MatchSummary": {},
   "SecondBatting": [],
   "SecondBattingDetailsBallByBall": [],
   "SecondBowlinDetailsgOverbyOver": [],
   "SecondBowling": [],
   "SecondInningsSummary": {}
}

【问题讨论】:

    标签: json angular ionic-framework


    【解决方案1】:

    非常感谢 Suraj,它工作正常 :)

    <ion-list *ngIf="resultScoreCard" >
          <ion-item-divider >First Batting  </ion-item-divider>
          <ion-item *ngFor="let item of resultScoreCard.FirstBatting; let i = index">
              <p><b>{{item.ShortName}}</b></p>
          </ion-item>
    </ion-list>

    【讨论】:

      【解决方案2】:

      您的记分卡是一个对象,而 scorecard.FirstBatting 是数组,

      <ion-list *ngIf="resultScoreCard">
        <ion-item *ngFor="let item of resultScoreCard.FirstBatting; let i = index">
             <p><b>Match Palyed: {{item.Name}}</b> </p>        
        </ion-item>
      </ion-list>
      

      【讨论】:

      • 我无法访问 scorecard.FirstBatting 数组,我得到以下错误:C:\My_Artifacts\My_Codes\R&D\IONIC\IOINC2\PCA\node_modules\@angular\core\src\error_handler.js :48 例外:./ScoreCardInputPage 类 ScoreCardInputPage 中的错误 - 内联模板:46:17 原因:无法读取未定义的属性“FirstBatting”
      • 你能把组件类放在问题里吗?您没有收到记分卡对象
      • 是的,我是按需调用的,所以初始加载对象将不存在,我已经添加了 html 和 ts 文件
      • 只需添加 if 条件 .. 它会在对象存在时显示
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      相关资源
      最近更新 更多