当前位置: 首页 > 面试题库 >

AngularJS三阶嵌套表结构

麻宜春
2023-03-14
问题内容

说我有以下数据结构

{
    'Key 1': {
        'Value 1': ['a', 'b', 'c'],
        'Value 2': ['d', 'e']
    },
    'Key 2': {
        'Value 3': ['f'],
        'Value 4': ['g', 'h']
    }
}

如何使用AngularJS在类似于以下的表格中呈现它:

|-------|---------|---|
| Key 1 | Value 1 | a |
|       |         |---|
|       |         | b |
|       |         |---|
|       |         | c |
|       |---------|---|
|       | Value 2 | d |
|       |         |---|
|       |         | e |
|-------|---------|---|
| Key 2 | Value 3 | f |
|       |---------|---|
|       | Value 4 | g |
|       |         |---|
|       |         | h |
|-------|---------|---|

按键是通过完成的rowspan


问题答案:

如果您确实确实需要使用rowspans进行处理,这是一种处理方法,除非您是作者(对不起),否则它很难完成并且几乎不可能阅读/关注,但是可以使用。您只需要夫妇$filter的支持

像这样:

angular.module('testApp', [])
.controller('testController', function ($scope) {
    $scope.testData = {
        'Key 1': {
            'Value 1': ['a', 'b', 'c'],
            'Value 2': ['d', 'e']
        },
        'Key 2': {
            'Value 3': ['f'],
            'Value 4': ['g', 'h']
        }
    };
})
.filter('nNestedElements', function(){
    var nNestedElements = function(collection, currentLevel, stopLevel){
        var total = 0;
        if(stopLevel==currentLevel){
            if(Object.prototype.toString.call(collection) === '[object Array]')
                total += collection.length;
            else
                total += Object.keys(collection);
        }else{
            angular.forEach(collection, function(value){
                total += nNestedElements(value, currentLevel+1, stopLevel);                
            });
        }
        return total;
    };
    return function(object, level){                
        return nNestedElements(object, 0, level);
    }
})
.filter('objectKeys', function(){
    return function(object){
        return Object.keys(object);
    };
});

视图:

<table ng-app="testApp" ng-controller="testController">
    <tr ng-repeat-start="(key, val) in testData">
        <td rowspan="{{val|nNestedElements:1}}">{{key}}</td>
        <td rowspan="{{val[(val|objectKeys)[0]].length}}">{{(val|objectKeys)[0]}}</td>
        <td>{{ val[(val|objectKeys)[0]][0]}}</td>
    </tr>
    <tr ng-repeat="val2 in val[(val|objectKeys)[0]].slice(1)">
        <td>{{val2}}</td>
    </tr>
    <tr ng-repeat-start="subkey in (val|objectKeys).slice(1)">
        <td rowspan="{{val[subkey].length}}">{{subkey}}</td>
        <td>{{ val[subkey][0] }}</td>
    </tr>
    <tr ng-repeat="value3 in val[subkey].slice(1)" ng-repeat-end>        
        <td>{{ value3 }}</td>
    </tr>
    <tr ng-repeat-end ng-if="false" ><td></td></tr>
</table>


 类似资料:
  • 从另一个角度看这3行: 编辑:注意表有2000列,是否可以动态创建一个类(或向类添加属性),例如在Scala中从外部文件加载字段名和类型?我知道case类仅限于22个字段 Edit2:还要注意,任何属性都可以有多行(rowkey除外),即orderid、name、amount、supplier、account和1995+其他列,所以为所有这些属性创建单独的“singleline”类是不可行的,我正

  • 到现在为止,我们都是在Java文件中直接定义类。这样的类出现在包(package)的级别上。Java允许类的嵌套定义。 这里将讲解如何在一个类中嵌套定义另一个类。 嵌套 内部类 Java允许我们在类的内部定义一个类。如果这个类是没有static修饰符,那么这样一个嵌套在内部的类称为内部类(inner class)。 内部类被认为是外部对象的一个成员。在定义内部类时,我们同样有访问权限控制(publ

  • 如何使用MapStruct映射嵌套列表? 下面是我的实体类: 我想把它映射到: 现在,我的映射器看起来像: 但它只映射“普通”属性,如Long、intger等,但它避免了嵌套列表。

  • 问题内容: 如何跳过使用AngularJS验证嵌套表单的方法?即使子窗体无效,我也必须使其外部窗体有效。 在下面的示例中,外部格式应该有效(必须为true)。默认情况下不是。有选择吗? 代码(jsFiddle): 问题答案: 在Angular形式中可以嵌套。这意味着外部形式在所有子形式都有效时也有效。 因此,当内部变量之一无效时,无法使外部格式自动有效(通过键)。 尝试使用 演示版 从Angula

  • 本文向大家介绍C++ 嵌套类/结构,包括了C++ 嵌套类/结构的使用技巧和注意事项,需要的朋友参考一下 示例 甲class或struct还可以包含另一个class/struct内部本身的定义,这被称为“嵌套类”; 在这种情况下,包含类称为“封闭类”。嵌套类定义被认为是封闭类的成员,但在其他方面则是单独的。 从封闭类的外部,可以使用范围运算符访问嵌套类。但是,在封闭类的内部,可以使用没有限定符的嵌套

  • 4. 嵌套结构体 结构体也是一种递归定义:结构体的成员具有某种数据类型,而结构体本身也是一种数据类型。换句话说,结构体的成员可以是另一个结构体,即结构体可以嵌套定义。例如我们在复数的基础上定义复平面上的线段: struct segment { struct complex_struct start; struct complex_struct end; }; 从第 1 节 “复合类型与结构体”