2016-04-07 22 views
0

Mein Ziel ist es, ein Array aus Objekt (als Tabellenzeilen) zu erstellen, aber ich bekomme den $ rootScope: infdig Fehler.

Hier ist mein Code:

$scope.rows = { 
"TableName": "TestTable", 
"Rows": [{ 
    "Name": "Name1", 
    "RowCells": [{ 
     "Y": 2001, 
     "M": 164 
    }, { 
     "Y": 2002, 
     "M": 178 
    }, { 
     "Y": 2003, 
     "M": 188 
    }, { 
     "Y": 2007, 
     "M": 295 
    }, { 
     "Y": 2008, 
     "M": 316 
    }, { 
     "Y": 2009, 
     "M": 328 
    }] 
}], 
"Rows": [{ 
    "Name": "Name2", 
    "RowCells": [{ 
     "Y": 2001, 
     "M": 164 
    }, { 
     "Y": 2002, 
     "M": 178 
    }, { 
     "Y": 2003, 
     "M": 188 
    }, { 
     "Y": 2007, 
     "M": 295 
    }, { 
     "Y": 2008, 
     "M": 316 
    }, { 
     "Y": 2009, 
     "M": 328 
    }] 
}], 
"Rows": [{ 
    "Name": "Name3", 
    "RowCells": [{ 
     "Y": 2001, 
     "M": 164 
    }, { 
     "Y": 2002, 
     "M": 178 
    }, { 
     "Y": 2003, 
     "M": 188 
    }, { 
     "Y": 2007, 
     "M": 295 
    }, { 
     "Y": 2008, 
     "M": 316 
    }, { 
     "Y": 2009, 
     "M": 328 
    }] 
}] 
} 

$scope.rowCells = function() { 
       var tableRowCollection = []; 

       angular.forEach($scope.rows, function (item) { 
        var tableRow = []; 
        tableRow.push(item.Name); 
        angular.forEach(item.RowCells, function (i) { 
         tableRow.push(i.M); 
        }); 
        tableRowCollection.push(tableRow); 
       }); 
       return tableRowCollection ; 
      }; 

<div data-ng-repeat="r in rowCells()">{{r}}</div> 

ich ähnliche Frage gesehen haben here aber das half nicht. was fehlt mir oder wohin gehe ich falsch?

Antwort

0

Ihre Zeilen Array wie folgt sein sollte:

$scope.rows = { 
"TableName": "TestTable", 
"Rows": [{ 
    "Name": "Name1", 
    "RowCells": [{ 
     "Y": 2001, 
     "M": 164 
    }, { 
     "Y": 2002, 
     "M": 178 
    }, { 
     "Y": 2003, 
     "M": 188 
    }, { 
     "Y": 2007, 
     "M": 295 
    }, { 
     "Y": 2008, 
     "M": 316 
    }, { 
     "Y": 2009, 
     "M": 328 
    }] 
}, { 
    "Name": "Name2", 
    "RowCells": [{ 
     "Y": 2001, 
     "M": 164 
    }, { 
     "Y": 2002, 
     "M": 178 
    }, { 
     "Y": 2003, 
     "M": 188 
    }, { 
     "Y": 2007, 
     "M": 295 
    }, { 
     "Y": 2008, 
     "M": 316 
    }, { 
     "Y": 2009, 
     "M": 328 
    }] 
}, { 
    "Name": "Name3", 
    "RowCells": [{ 
     "Y": 2001, 
     "M": 164 
    }, { 
     "Y": 2002, 
     "M": 178 
    }, { 
     "Y": 2003, 
     "M": 188 
    }, { 
     "Y": 2007, 
     "M": 295 
    }, { 
     "Y": 2008, 
     "M": 316 
    }, { 
     "Y": 2009, 
     "M": 328 
    }] 
}] 
} 
+0

Sie haben Recht, es war ein Fehler in meinem Objekt aber nur aufgeschoben wird, während ich das Beispiel war die Schaffung, das reale Objekt in Ordnung ist. – agri

0

Als Staskus vorgeschlagen, müssen Sie Ihr Array ändern. Ihre foreach Schleife sollte wie unten sein:

angular.forEach($scope.rows.Rows, function(item) { 
    var tableRow = []; 
    tableRow.push(item.Name); 
    angular.forEach(item.RowCells, function(i) { 
     tableRow.push(i.M); 
    }); 
    tableRowCollection.push(tableRow); 
}); 
+0

Ja, $ scope.rows sollte $ scope.rows.Rows in diesem Beispiel sein. Das reale Objekt, mit dem ich arbeite, kommt von der API über Ajax und wurde als $ scope.rows = response.data.Rows gesetzt. Ich bekomme immer noch den Fehler: [$ rootScope: infdig] – agri

+0

$ rootScope: infdig Fehler kommt, wenn es eine Endlosschleife gibt, wo Modell aktualisiert wird basierend auf Ansichtsdaten und anzeigen Daten löst Modellupdates. HTML, das Sie zur Verfügung gestellt haben, enthält nur teilweise. Wenn Sie vollständigen HTML-Code zur Verfügung stellen können, wird es leicht zu identifizieren sein. Bitte überprüfen Sie diesen Link für unendlich Fehler: https: //docs.angularjs.org/error/$rootScope/infdig – Sree

+0

Ja, ich habe diesen Link gesehen und herausgefunden, dass es

{{r}}
Teil ist, die Probleme verursacht. Am Ende habe ich einen anderen Ansatz gewählt. – agri

Verwandte Themen