如何在AngularJS中更改2D数组的属性?

时间:2017-05-03 16:22:03

标签: javascript angularjs arrays

所以我有一个动态表,我需要跟踪几个属性。我使用angularJS来执行此操作,并使用2D数组对象来跟踪表格的元素。

我的代码如下所示:

$scope.table = [];
$scope.generateTable = function(){
    var table = [[], []];
    for (var i = 0; i < $scope.height; i++) {
        $scope.table[i] = []
        for (var j = 0; j < $scope.width; j++) {
            $scope.table[i].push({
                display: 'X',
                alive: false
            });
        }
    }
}

$scope.changeProp = function(x, y){
    $scope.table[x][y].alive = !$scope.table[x][y].alive;
    $scope.table[x][y].alive ? $scope.table[x][y].display = 'O' : $scope.table[x][y].display = 'X';
}

但是它说'不能读取未定义的属性&#39;每当我尝试运行changeProp()函数时。元素存在于数组中并且正确显示在前端,为什么我不能使用语法arr [] []更改函数中的元素?

编辑:进一步审核后,问题似乎是宽度未正确传递给changeProp。这是前端代码:

<tr ng-repeat="x in table">
    <td ng-repeat="y in x track by $index" align="center" ng-click="changeProp($parent.index, $index)">
        {{ y.display }}
    </td>
</tr>

3 个答案:

答案 0 :(得分:1)

你以错误的方式传递了父索引。

  

将$ parent.index编辑为$ parent。$ index。

<tr ng-repeat="x in table">
    <td ng-repeat="y in x track by $index" align="center" ng-click="changeProp($parent.$index, $index)">
        {{ y.display }}
    </td>
</tr>

答案 1 :(得分:1)

请尝试如下:

edit your profile

IN UI:

$scope.table = [{},{}];
$scope.generateTable = function(){
    var table = [{}, {}];
    for (var i = 0; i < $scope.height; i++) {
        $scope.table[i] = {};
        for (var j = 0; j < $scope.width; j++) {
            $scope.table[i].push({
                display: 'X',
                alive: false
            });
        }
    }
}

$scope.changeProp = function(x, y){
    x =parseInt(x);
    y= parseInt(y);
    $scope.table[x][y]['alive'] = !$scope.table[x][y]['alive'];
    $scope.table[x][y]['alive'] ? $scope.table[x][y]['display'] = 'O' : $scope.table[x][y]['display'] = 'X';
}

答案 2 :(得分:0)

我已经解决了这个问题。

我需要将一个变量初始化为ng-repeat的索引。

示例:

Sub WorksheetLoop()

 Dim c As Integer
 Dim n As Integer
 c = ActiveWorkbook.Worksheets.Count
 For n = 1 To c Step 1
    Last = Worksheets(n).Cells(Rows.Count, "A").End(xlUp).Row
    For i = Last To 1 Step -1
        If (Worksheets(n).Cells(i, "A").Value) = "Oakville" Then
            Worksheets(n).Cells(i, "A").EntireRow.Delete
        End If
    Next i
 Next n
 End Sub