我有一个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;
};
}
该方法适用于页面加载,并且更改就座下拉菜单正确反映了属性(就座人数),但是当您再次将下拉菜单更改为时,更新的计数器不会反映正确的数字。我无法弄清楚为什么计数器没有正确改变,因为逻辑看起来都很合理。
有人能指出我正确的方向吗?
提前谢谢。答案 0 :(得分:2)
问题在于,当您将预订从“已安装”更改为“未就座”时,booking.seated模型的值已更改为字符串“false”而非布尔值false。任何非空的字符串都会计算为true,这就是toSeat()中发生的事情。
Boolean("false"); // == true
Here is your fiddle将true和false替换为字符串“true”和“false”,条件现在正在检查是否booking.seated ===“true”