javascript - 两个带有按键排序的独立对象的 ng-repeat

标签 javascript angularjs

老实说,我什至不知道如何设计它。

从两个不同的来源我会得到两个相当复杂的对象(简化):

 var header = {
     fieldName1: {otherstuff: x},
     fieldName2: {otherstuff: y},
     fieldName3: {otherstuff: z}
 }

 var data = [
 {
     fieldName3: {someData: 1},
     fieldName2: {someData: 2},
     fieldName4: {someData: 3}
 },
 {
     fieldName2: {someData: 11},
     fieldName3: {someData: 22},
     fieldName1: {someData: 33}
 }
 ];

我想建立一个表,表头行显示第一个对象的键,表行用第二个对象的一些数据值构建。

当然,数据列需要与表格标题行相同的顺序。

    <table>
      <tr>
        <th ng-repeat="(fieldKey, fieldMeta) in header">{{fieldKey}}: {{fieldMeta.label}}</th>
      </tr>
      <tr ng-repeat="row in data">
        <td ng-repeat="value in row">{{value}}</td>
      </tr>
    </table>

那么我该如何处理呢? 我应该首先尝试对 header 和数据对象进行排序(作为对象还是应该先转换为数组),或者是否可以选择通过第二个 ng-repeat 中的 orderBy 实现相同的目的?

我非常确定,当我花一两天时间时,我会想出一个解决方案,该解决方案由多个实用程序类中的 100 行代码组成,试图逐个解决问题。

我不需要现成的代码,但非常感谢有经验的 JS 人员提供一些指导。

最佳答案

您可以尝试在第二个内部 ng-repeat 中重复您的 header ,并使用键访问适当的行数据。这样,标题中数据的顺序就作为定义的顺序。不确定这种方法的性能。例如:

<table>
  <tr>
    <th ng-repeat="(fieldKey, fieldMeta) in header">{{fieldKey}}: {{fieldMeta.label}}</th>
  </tr>
  <tr ng-repeat="row in data">
    <td ng-repeat="(key, meta) in header">{{row[key]}}</td>
  </tr>
</table>

fiddle 示例 here .请注意,按对象键排序并不是最好的主意,因为无法保证顺序,因此我建议转换为单个对象的数组。

关于javascript - 两个带有按键排序的独立对象的 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40544589/

相关文章:

javascript - 在 Coffeescript 中迭代 ES6 Set/Map(使用 `of` 运算符)

javascript - 如何将多个集合数据从mongodb渲染到node js中的页面

angularjs - 如何定义 chart.js 时间刻度日期格式

javascript - Angular "Duplicate key in repeater"错误仅在一台机器上 - IE Chrome 和 FF

javascript - 将 html 内容调用到 jQuery 变量中

javascript - 在某个 DOM 对象中打开链接

javascript - HTML 中的 onLoad、onDomready、Nowrapp-in<head> 和 Nowrap-in<body> 有什么区别?

angularjs - Angular Typescript - 在 Controller 中使用自定义过滤器

html - Angular 组件倾斜的背景

javascript - 防止 input[type=number] 自动舍入浮点值