如何在特定标签内使用两个ng-repeat

时间:2016-01-05 12:40:10

标签: javascript angularjs json

我有一个json,在这个json里面有一个我想要在<td>中迭代的数组。 我的功能就像我必须根据用户输入创建一个表。用户提供行数,输入列和输出列的输入。所以我有三个数组,即$ rootScope.input_columns,$ rootScope.output_columns和$ rootScope.rows,其中包含用户提供的用于创建表的数据。现在在input_columns中有一个数组,其中包含我需要在行单元格上显示的一些信息。但是使用我目前的代码,它给了我空白行。

控制器:

var app = angular.module('rulesApp');

app.controller('myController2', ['$scope', '$rootScope',function($scope, $rootScope){
var inputcol=[];
            $rootScope.input_col=$scope.no_of_input;
            $rootScope.output_col=$scope.no_of_output;
            $rootScope.rows=$scope.no_of_row;
            for(var i=0;i<$rootScope.input_col;i++){
                inputcol.push({
                    id: inputcol.length,
                    dropped: false,
                    dataType:'',
                    name:'',
                    type:'input',
                    path:'',
                    rowCellValue:[],
                    rowCellValueOutput:[]
                });
            }$rootScope.input_columns=inputcol;//here i get input_columns json, Similarly json are made for output_columns and rows
            $scope.statementSelected = function(branch, selected_branches) {
        if(branch.selected) {
            for(var i = 0; i < $rootScope.input_columns.length; i++) {  
//Here i add an array inside input_columns.rowCellValue     $rootScope.input_columns[i].rowCellValue.push($rootScope.rows[i].rowCellValue);
                    }
})

添加input_columns的结构

enter image description here

这是我的HTML代码:

<tbody>
    <tr ng-repeat="row in rows"><!--It iterates on row json -->
        <td><input type="checkbox"></td>
        <!--Here i want that in row cells input_columns.rowCellValue data gets populate on row cell for input column -->
        <td ng-repeat="col in input_columns.rowCellValue">{{(col == "") && "&lt;enter data&gt;" || (col.split("/")[3])}}</td>
        <!--Here i want that in row cells output_columns.rowCellValueOutput data gets populate on row cell for output column -->
        <td ng-repeat="col in output_columns.rowCellValueOutput" ng-click="openDialog($event)">{{(col == "") && "&lt;enter data&gt;" || (col.split("/")[3])}}</td>              
    </tr>
</tbody>

我希望得到这样的结构 enter image description here

但我得到空行 enter image description here

任何人都可以帮我完成这项任务。是否有一个问题,我没有迭代input_columns所以我没有得到input_columns.rowCellValue值。如何在表列中获取input_columns.rowCellValue的值?无论如何我可以使用两个ng重复,第一次ng-repeat我可以得到input_column值[col在input_column]和第二次ng-repeat我可以获得rowCellValue [col.rowCellValue中的单元格]。?

我正在尝试一些解决方案并想出了一种访问rowCellValue的方法:

这是修改后的html代码

<tbody>
        <tr ng-repeat="row in rows"><!--It iterates on row json -->
            <td><input type="checkbox"></td>
            <!--Here i want that in row cells input_columns.rowCellValue data gets populate on row cell for input column -->
<!--here with $index i am getting first value of rowCellValue in entire column can i iterate it with using rows length -->
            <td ng-repeat="col in input_columns">{{(col.rowCellValue[$index] == "") && "&lt;enter data&gt;" || (col.rowCellValue[$index].split("/")[3])}}</td>
            <!--Here i want that in row cells output_columns.rowCellValueOutput data gets populate on row cell for output column -->
            <td ng-repeat="col in output_columns" ng-click="openDialog($event)">{{(col.rowCellValueOuput[$index] == "") && "&lt;enter data&gt;" || (col.rowCellValueOutput[$index].split("/")[3])}}</td>    

        </tr>
    </tbody>

这是我想要input_column的实际表: enter image description here

但我得到了这个: enter image description here

我可以用行长而不是$ index迭代col.rowCellValueOutput [$ index]吗?并为每一列。如果是,请为此提出一些建议。

2 个答案:

答案 0 :(得分:1)

您是否尝试将其放入JSON对象并循环访问JSON。看起来你要做的是,每次创建新行时,inputColoutputCol都会尝试输出每一行的所有内容。

//pseudo code
ng-repeat row in rows
    ng-repeat input in inputs
    ng-repeat output in outputs

每次循环rows时,所有inputsoutputs数据都会再次输出,使每一行都相同。

如果您创建了一个JSON对象并完成了类似的事情,那么

ng-repeat row in rows
    ng-repeat input in row.input
    ng-repeat output in row.output

您的JSON看起来像

var rows = [{ input: [ "row1", "col2" ], output: [ "col3", "col4" ] },
            { input: [ "row2", "col2" ], output: [ "col3", "col4" ] }];

答案 1 :(得分:1)

我找到了解决问题的方法:

<td ng-repeat="col in input_columns" title="" id="{{col}}">{{(col.rowCellValue[$parent.$index] == "") && "&lt;enter data&gt;" || (col.rowCellValue[$parent.$index].split("/")[3])}}</td>

在json的控制器结构中就像:

input_column({
rowCellValue[
0:dic2317/fdgdfg3535/accViolation
1:dic2317/sdg3436dg/driver
})

我使用$ parent。$ index来迭代行索引。