AngularJS - 在对象属性上进行计算时出现奇怪的错误

时间:2015-11-12 07:48:17

标签: javascript angularjs

我有这个计算

if (typeof $scope.memoryTable[name][category]['total'] !== 'undefined') {
    $scope.memoryTable[name][category]['total'] = $scope.memoryTable[name][category]['total'];
}
else {
    $scope.memoryTable[name][category]['total'] = 0;
}

这看起来很正常,显然没有错误。

但是,如果我试图对该属性进行简单的计算,即

if (typeof $scope.memoryTable[name][category]['total'] !== 'undefined') {
    // add 10
    $scope.memoryTable[name][category]['total'] = $scope.memoryTable[name][category]['total'] + 10;
}
else {
    $scope.memoryTable[name][category]['total'] = 0;
}

然后AngularJS引发了一堆我不知道它们意味着的错误(见截图)

此外,尽管有错误,它仍会进行计算但值不正确(会返回几千个)

这可能是什么问题?我认为这可能与摘要周期有关。

enter image description here

2 个答案:

答案 0 :(得分:0)

使用$ log API检查total属性的数据类型,并继续检查其他属性,如下所示:

if ($scope.memoryTable &&
    $scope.memoryTable[name] &&
    $scope.memoryTable[name][category] &&
    $scope.memoryTable[name][category]['total'] && 
    typeof $scope.memoryTable[name][category]['total'] !== 'undefined') {

    // check the type of total
    $log.log("type of the total" + typeof $scope.memoryTable[name][category]['total']);
    // add 10
    $scope.memoryTable[name][category]['total'] += 10;
}
else {
    $scope.memoryTable[name][category]['total'] = 0;
}
// Check the value
$log.log("value of the total" + $scope.memoryTable[name][category]['total']);

答案 1 :(得分:0)

看起来$ scope.memoryTable或... ['总计']在$ watch某处。因此,在$ digest循环之间,您再次尝试修改它。

var total = $ scope.memoryTable [name] [category] ​​[' total'];

if(typeof total!==' undefined'){

total += 10;

}其他{

total = 0;

}

$ scope.memoryTable [name] [category] ​​[' total'] = total;