【问题标题】:ionic Angular ngModel: ngFor loop for inner arraysionic Angular ngModel:内部数组的 ngFor 循环
【发布时间】:2019-11-10 04:05:08
【问题描述】:

我有一个像这样的对象:

const members = {
    pokiuy45 : {
        details:{
            fullname: 'Member 1',
            age: 58
        },
        contributions:{
            100: [
                {
                    date: 'date1',
                    amount: 500
                }
            ],
            200:[
                {
                    date: 'date1',
                    amount: 600
                },
                {
                    date: 'date2',
                    amount: 400
                },
                {
                    date: 'date3',
                    amount: 200
                }
            ]
        },
        stats: {
            total_points: 563,
            balance: 63,
            comments: 'random text'
        }
    },

    LoghnfLM : {
        details:{
            fullname: 'Second memeber',
            age: 31
        },
        contributions:{
            100: [
                {
                    date: 'date1',
                    amount: 100
                },
                {
                    date: 'date2',
                    amount: 300
                },
                {
                    date: 'date3',
                    amount: 200
                }
            ],
            200:[
                {
                    date: 'date1',
                    amount: 200
                },
                {
                    date: 'date2',
                    amount: 1000
                }
            ]
        },
        stats: {
            total_points: 587,
            balance: 420,
            comments: 'random text'
        }
    }
}

标签pokiuy45 和LoghnfLM 代表成员ID。每个成员都有一个子对象来呈现详细信息(例如全名和年龄,然后是100 和200 池中的贡献数组。(实际上,池可能更多,每个成员可能在每个游泳池)。
我想在一个元素中显示每个贡献,每个项目显示每个贡献的名称、年龄、日期和金额。

最终目标是有一个看起来像这样的列表......

据我所知,ngFor 仅用于数组。那么我怎样才能做到这一点呢?我不知道从哪里开始。

【问题讨论】:

    标签: angular ionic3 javascript-objects ngfor


    【解决方案1】:

    只需将您的对象转换为数组:

    this.membersArray = Object.entries(this.members).map(([key, value]) => {
      value.memberName = key;
      return value;
    });
    

    之后,您可以将它与 *ngFor 循环一起使用。

    脚本付诸行动:

    const members = {
        pokiuy45 : {
            details:{
                fullname: 'Member 1',
                age: 58
            },
            contributions:{
                100: [
                    {
                        date: 'date1',
                        amount: 500
                    }
                ],
                200:[
                    {
                        date: 'date1',
                        amount: 600
                    },
                    {
                        date: 'date2',
                        amount: 400
                    },
                    {
                        date: 'date3',
                        amount: 200
                    }
                ]
            },
            stats: {
                total_points: 563,
                balance: 63,
                comments: 'random text'
            }
        },
    
        LoghnfLM : {
            details:{
                fullname: 'Second memeber',
                age: 31
            },
            contributions:{
                100: [
                    {
                        date: 'date1',
                        amount: 100
                    },
                    {
                        date: 'date2',
                        amount: 300
                    },
                    {
                        date: 'date3',
                        amount: 200
                    }
                ],
                200:[
                    {
                        date: 'date1',
                        amount: 200
                    },
                    {
                        date: 'date2',
                        amount: 1000
                    }
                ]
            },
            stats: {
                total_points: 587,
                balance: 420,
                comments: 'random text'
            }
        }
    }
    
    const membersArray = Object.entries(members).map(([key, value]) => {
      value.memberName = key;
      return value;
    });
    
    console.log(membersArray);

    编辑

    对于您提供的 HTML(无样式):

    <div *ngFor="let member of membersArray">
      <div *ngFor="let contribution of member.contributions">
        <div>{{ member.memberName }}</div>
        <div>
          <span>{{ member.details.fullName }}</span>
          <span>contribution: {{ contribution.contributionName }}</span>
          <span>{{ contribution.date }}</span>
        </div>
        <div>
          <span>Amount: {{ contribution.amount }}</span>
        </div>
      </div>
    </div>
    

    请注意,您还必须解析和展平您的贡献才能使其工作:

    const members = {
        pokiuy45 : {
            details:{
                fullname: 'Member 1',
                age: 58
            },
            contributions:{
                100: [
                    {
                        date: 'date1',
                        amount: 500
                    }
                ],
                200:[
                    {
                        date: 'date1',
                        amount: 600
                    },
                    {
                        date: 'date2',
                        amount: 400
                    },
                    {
                        date: 'date3',
                        amount: 200
                    }
                ]
            },
            stats: {
                total_points: 563,
                balance: 63,
                comments: 'random text'
            }
        },
    
        LoghnfLM : {
            details:{
                fullname: 'Second memeber',
                age: 31
            },
            contributions:{
                100: [
                    {
                        date: 'date1',
                        amount: 100
                    },
                    {
                        date: 'date2',
                        amount: 300
                    },
                    {
                        date: 'date3',
                        amount: 200
                    }
                ],
                200:[
                    {
                        date: 'date1',
                        amount: 200
                    },
                    {
                        date: 'date2',
                        amount: 1000
                    }
                ]
            },
            stats: {
                total_points: 587,
                balance: 420,
                comments: 'random text'
            }
        }
    }
    
    const membersArray = Object.entries(members).map(([key, value]) => {
      value.memberName = key;
      value.contributions = Array
        .prototype
        .concat
        .apply(
          [], 
          Object
            .entries(value.contributions)
            .map(([cKey, cValue]) => {
              cValue.forEach(v => v.contributionName = cKey);
              return cValue;
            })
        );
      return value;
    });
    
    console.log(membersArray);

    【讨论】:

    • 我明白了,但是我如何才能在每个&lt;ion-item&gt; 中打印成员的详细信息和贡献详细信息?我的挑战是,成员详细信息(姓名和年龄)在一个子对象中,贡献在一个数组中,来自另一个子对象。那么是否有可能在ngFor 循环中从贡献中读取属性并读取相应成员的详细信息?
    • @PhoenixBlue 不确定您的最终目标。请通过您想要的预期对象结果(或预期的 HTML)进行解释。
    • 我编辑了这个问题,在最后添加了一个 HTML 渲染它应该是什么样子
    猜你喜欢
    • 2020-12-19
    • 2018-06-17
    • 2016-07-10
    • 2021-06-11
    • 2017-09-27
    • 2021-06-04
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    相关资源
    最近更新 更多