Javascript 在ng repeat上填充新数组
Javascript 在ng repeat上填充新数组,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,$scope由控制器上的代码和金额组成的数组。计算函数的摘要时,浏览器未捕获错误:已达到10$digest()迭代次数。流产无限循环导致的错误(奇怪,但它正在工作) 当ng repeat时,有没有合适的方法组合新数组而不产生无限循环错误 任何帮助都将不胜感激 更新:行变量不是静态的,可以添加、修改或删除。 var myApp=angular.module('myApp',[]); 函数MyCtrl($scope){ $scope.Lines=[{代码:'X',金额:'10'}, {代码:'Y
$scope
由控制器上的代码和金额组成的数组。计算函数的摘要时,浏览器未捕获错误:已达到10$digest()迭代次数。流产代码>无限循环导致的错误(奇怪,但它正在工作)
当ng repeat
时,有没有合适的方法组合新数组而不产生无限循环错误
任何帮助都将不胜感激
更新:行变量不是静态的,可以添加、修改或删除。
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.Lines=[{代码:'X',金额:'10'},
{代码:'Y',金额:'10'},
{代码:'Z',金额:'20'},
{代码:'Y',金额:'1'}];
$scope.Sums=函数(){
var sums=新数组();
对于(变量i=0;i<$scope.Lines.length;i++){
var added=假;
对于(var j=0;j
Html:
{{line.Code}}
{{line.Amount}}
总结
{{sum.Code}
{{sum.Amount}}
如果您这样做,这种情况还会发生吗:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.Lines = [ {Code:'X', Amount:'10'},{Code:'Y', Amount:'10'},
{Code:'Z', Amount:'20'},{Code:'Y', Amount:'1'}];
$scope.Sums = [];
calculate();
var calculate = function(){
$scope.Sums.length = 0;
for (var i = 0; i < $scope.Lines.length; i++) {
var added = false;
for (var j = 0; j < $scope.Sums.length; j++) {
if ($scope.Sums[j].Code == $scope.Lines[i].Code) {
$scope.Sums[j].Amount = parseFloat( $scope.Sums[j].Amount) + parseFloat($scope.Lines[i].Amount);
added = true;
break;
}
}
if (!added) {
$scope.Sums.push( { Code:$scope.Lines[i].Code, Amount: $scope.Lines[i].Amount } );
}
}
}
}
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.Lines=[{Code:'X',Amount:'10'},{Code:'Y',Amount:'10'},
{代码:'Z',金额:'20'},{代码:'Y',金额:'1'}];
$scope.Sums=[];
计算();
var calculate=函数(){
$scope.Sums.length=0;
对于(变量i=0;i<$scope.Lines.length;i++){
var added=假;
对于(变量j=0;j<$scope.Sums.length;j++){
如果($scope.Sums[j]。代码==$scope.line[i]。代码){
$scope.Sums[j].Amount=parseFloat($scope.Sums[j].Amount)+parseFloat($scope.line[i].Amount);
添加=真;
打破
}
}
如果(!已添加){
$scope.Sums.push({Code:$scope.Lines[i].Code,Amount:$scope.Lines[i].Amount});
}
}
}
}
请注意,在angular监视和之后,切勿创建新数组,这一点很重要。如果需要清空,请使用$scope.Sums.length=0
在您看来:
如果您这样做,这种情况还会发生吗:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.Lines = [ {Code:'X', Amount:'10'},{Code:'Y', Amount:'10'},
{Code:'Z', Amount:'20'},{Code:'Y', Amount:'1'}];
$scope.Sums = [];
calculate();
var calculate = function(){
$scope.Sums.length = 0;
for (var i = 0; i < $scope.Lines.length; i++) {
var added = false;
for (var j = 0; j < $scope.Sums.length; j++) {
if ($scope.Sums[j].Code == $scope.Lines[i].Code) {
$scope.Sums[j].Amount = parseFloat( $scope.Sums[j].Amount) + parseFloat($scope.Lines[i].Amount);
added = true;
break;
}
}
if (!added) {
$scope.Sums.push( { Code:$scope.Lines[i].Code, Amount: $scope.Lines[i].Amount } );
}
}
}
}
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.Lines=[{Code:'X',Amount:'10'},{Code:'Y',Amount:'10'},
{代码:'Z',金额:'20'},{代码:'Y',金额:'1'}];
$scope.Sums=[];
计算();
var calculate=函数(){
$scope.Sums.length=0;
对于(变量i=0;i<$scope.Lines.length;i++){
var added=假;
对于(变量j=0;j<$scope.Sums.length;j++){
如果($scope.Sums[j]。代码==$scope.line[i]。代码){
$scope.Sums[j].Amount=parseFloat($scope.Sums[j].Amount)+parseFloat($scope.line[i].Amount);
添加=真;
打破
}
}
如果(!已添加){
$scope.Sums.push({Code:$scope.Lines[i].Code,Amount:$scope.Lines[i].Amount});
}
}
}
}
请注意,在angular监视和之后,切勿创建新数组,这一点很重要。如果需要清空,请使用$scope.Sums.length=0
在您看来:
如果我没有弄错的话
for (var j = 0; j < sums.length; j++)
初始化数组而不是
var sums = [];
如果我没有弄错的话
for (var j = 0; j < sums.length; j++)
初始化数组而不是
var sums = [];
我宁愿在$scope.line
上放置一个$watch
,它将创建一个数组并将其填充为$scope.sums
,这样ng repeat就不必反复调用该方法。看
编辑(添加缺少的参数以进行深度监视):
我宁愿在$scope.line
上放置一个$watch
,它将创建一个数组并将其填充为$scope.sums
,这样ng repeat就不必反复调用该方法。看
编辑(添加缺少的参数以进行深度监视):
正如前面指出的,问题是因为您的sum()
正在返回一个对象
我建议使用过滤器来完成你需要的东西,就像这样
HTML
<div ng-controller="MyCtrl">
<table style="border: 1px solid black;">
<tr ng-repeat="line in Lines">
<td>{{ line.Code }}</td>
<td>{{ line.Amount }}</td>
</tr>
</table>
Summary
<table style="border: 1px solid black;">
<tr ng-repeat="sum in Lines | unique : 'Code'">
<td>{{ sum.Code }}</td>
<td>{{ Lines | filter: { Code: sum.Code } : true | sum: 'Amount' }}</td>
</tr>
</table>
</div>
{{line.Code}}
{{line.Amount}}
总结
{{sum.Code}
{Lines | filter:{Code:sum.Code}:true | sum:'Amount'}
脚本
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.Lines = [ {Code:'X', Amount:'10'},{Code:'Y', Amount:'10'},
{Code:'Z', Amount:'20'},{Code:'Y', Amount:'1'}];
}
myApp.filter('unique', function() {
return function(input, key) {
var unique = {};
var uniqueList = [];
for(var i = 0; i < input.length; i++){
if(typeof unique[input[i][key]] == "undefined"){
unique[input[i][key]] = "";
uniqueList.push(input[i]);
}
}
return uniqueList;
};
});
myApp.filter('sum', function() {
return function(input, key) {
var sum = 0;
for(var i = 0; i < input.length; i++){
sum += Number(input[i][key]);
}
return sum;
};
});
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.Lines=[{Code:'X',Amount:'10'},{Code:'Y',Amount:'10'},
{代码:'Z',金额:'20'},{代码:'Y',金额:'1'}];
}
myApp.filter('unique',function(){
返回功能(输入,按键){
var unique={};
var uniqueList=[];
对于(变量i=0;i