【问题标题】:How can I use ng-repeat to iterate through arrays associated using dynamic keys如何使用 ng-repeat 遍历使用动态键关联的数组
【发布时间】:2017-09-08 13:43:59
【问题描述】:

我正在尝试使用 ng-repeat 遍历对象数组并使用每个对象 ID 来查找绑定到清单模型的数据。 我正在处理的项目中有以下 javascript 对象:

{
diagnosis: {
            mainfractures: [
                        {
                            id: "metacarpal",
                            textinput_id: "metacarpal_text",
                            title: "5th Metacarpal",
                        },
                        {
                            id: "proximal_phalanx",
                            textinput_id: "proximal_phalanx_text",
                            title: "Proximal Phalanx",
                        },
                        {
                            id: "middle_phalanx",
                            textinput_id: "middle_phalanx_text",
                            title: "Middle Phalanx",
                        },
                        {
                            id: "distal_phalanx",
                            textinput_id: "distal_phalanx_text",
                            title: "Distal Phalanx",
                        },
                        {
                            id: "scaphoid_fracture",
                            textinput_id: "scaphoid_fracture_text",
                            title: "Scaphoid Fracture",
                        }
          ]
   }}

这是我的清单模型。当用户选择一个复选框时,一个值将绑定到与该断裂相关的数组。

$scope.checklists = {
                    "diagnosis": {
                         metacarpal: [],
                         proximal_phalanx: [],
                         middle_phalanx: [],
                         distal_phalanx: [],
                         scaphoid_fracture: []
                    }
                }

Checklist Image Example

一旦用户做出类似于上图的选择,掌骨的清单模型应如下所示:掌骨:[“头”]

我要做的是通过fracture.id 在bulletpoint 中列出每个用户选择。我正在尝试用这段代码来完成它,但到目前为止它只列出了骨折标题。尝试将fracture.id 插入ng-repeat 是否有问题?

<div ng-repeat="fracture in diagnosis.mainfractures">
          <div > <!--ng-if="checklists['diagnosis'][fracture.id] > 0"-->
            <h4>{{ fracture.title }}</h4>
            <div class="row">
              <ul type="disc">
                <li ng-repeat="selection in checklists['diagnosis'][fracture.id]">
                  &bull; {{ capitalize(selection) }}
                </li>
              </ul>
            </div>
        </div>
      </div>

【问题讨论】:

  • 我很困惑,根据你的 mainfractures 数据集,没有“头”。这意味着清单 ['diagnosis']['head'] 将是未定义的。你可能会做一些类似检查表['diagnosis']['metacarpal']
  • head 没有出现 undefined 因为我没有粘贴完整的模型。我要做的是遍历诊断属性及其相应的数组,然后显示每个元素。我正在尝试使用“fracture.id”来完成此操作。抱歉,如果不清楚。
  • 检查我的答案。如果问题不是由于语法错误引起的,请使用检查“头部”或“颈部”时执行的代码更新您的问题。

标签: javascript angularjs json angularjs-directive angularjs-ng-repeat


【解决方案1】:

根据您提供的代码,我不得不说您的问题实际上是由于 JS 语法错误。每个对象项后都缺少逗号,这里有一个随机双引号 scaphoid_fracture"[]。

$scope.checklists = {
                "diagnosis": {
                     metacarpal: []
                     proximal_phalanx: []
                     middle_phalanx: []
                     distal_phalanx: []
                     scaphoid_fracture"[]
                }
            }

这是一个完整的工作jsfiddle

【讨论】:

    【解决方案2】:

    稍微调整了代码:

    但似乎通过 ng-repeat 中的动态对象键访问非常正确

    https://jsbin.com/rodecosoyo/1/edit?html,js,output

    角度应用

    var app = angular.module('arrayid', []);
    
    app.controller('arrayContainerCtrl', function($scope) {
      $scope.diagnosis = {
        mainfractures: [{
          id: "metacarpal",
          textinput_id: "metacarpal_text",
          title: "5th Metacarpal",
        }, {
          id: "proximal_phalanx",
          textinput_id: "proximal_phalanx_text",
          title: "Proximal Phalanx",
        }, {
          id: "middle_phalanx",
          textinput_id: "middle_phalanx_text",
          title: "Middle Phalanx",
        }, {
          id: "distal_phalanx",
          textinput_id: "distal_phalanx_text",
          title: "Distal Phalanx",
        }, {
          id: "scaphoid_fracture",
          textinput_id: "scaphoid_fracture_text",
          title: "Scaphoid Fracture",
        }]
      };
    
      $scope.checklists = {
        "diagnosis": {
          metacarpal: ['1', '2'],
          proximal_phalanx: ['2', '3'],
          middle_phalanx: ['3'],
          distal_phalanx: ['4'],
          scaphoid_fracture: ['5']
        }
      };
    
    });
    

    标记:

    <body ng-app='arrayid' ng-controller='arrayContainerCtrl'>
      <div ng-repeat="fracture in diagnosis.mainfractures">
          <h4>{{ fracture.title }}</h4>
          <div class="row">
            <ul type="disc">
              <li ng-repeat="selection in checklists['diagnosis'][fracture.id]">
                &bull; {{ selection | uppercase }}
              </li>
            </ul>
          </div>
      </div>
    </body>
    

    【讨论】:

    • 这显示了如何使用 ng-repeat,但我认为这实际上并不能满足他提出的显示用户选择的目标。
    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 2019-03-16
    • 2017-03-05
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多