2

我有一个 Angular 控制器方法,它计算等待就座的人数(比如在餐厅)。模型包含设置为 true 或 false 的属性。该方法应该遍历模型,检查“就座”属性并计算所有正确的。

见一个简单的例子:http: //jsfiddle.net/JoeDredd/nB4tP/

function seatingCtr($scope) {
$scope.bookings = [{
    name: 'fred',
    seated: true
}, {
    name: 'george',
    seated: false
}, {
    name: 'barney',
    seated: false
}];

$scope.toSeat = function () {
    var count = 0;
    angular.forEach($scope.bookings, function (booking) {
        count += booking.seated ? 0 : 1;
    });
    return count;
};

}

该方法适用于页面加载,并且更改就座下拉菜单正确反映了属性(就座人数),但是当您再次将下拉菜单更改为时,更新后的计数器不会反映正确的数字。我无法弄清楚为什么计数器没有正确更改,因为逻辑似乎都很合理。

谁能指出我正确的方向?

提前谢谢。

4

1 回答 1

2

问题是,当您将预订从“已就座”更改为“未就座”时,booking.seated 模型的值更改为字符串“false”而不是布尔值 false。任何非空字符串都将评估为真,这就是 toSeat() 内部发生的情况。

Boolean("false");  // == true

这是你用字符串“true”和“false”替换true和false的小提琴,条件现在正在检查booking.seated ===“true”

于 2013-06-09T17:36:21.900 回答