更新 2012 年 4 月 19 日太平洋标准时间下午 12 点:要在这个上吃乌鸦。问题不在于 Angular 的数据绑定,而在于我计算日期的数学错误。我在时间计算中没有正确考虑分钟和秒。我只是从彼此中减去时间戳,期望时间能很好地出来。
我让自己陷入了 AngularJS 数据绑定的麻烦,其中我的不同输入需要相互绑定。
表格需要包含以下内容:
- 开始日期(这是给定的,不是输入)
- 将小时数添加到开始日期的输入
- 结果的两个输入:1)日期选择器和 2)小时选择器
如果您更改任何输入,它应该更新其他输入。因此,以下将是理想的结果:
(原始日期时间为 4 月 19 日晚上 10 点)。用户输入“1 小时”。结果日期变为 4 月 19 日,结果时间变为晚上 11 点。
在上述示例的基础上,用户将日期输入更改为 4 月 20 日。“小时”现在变为 25 小时。
我已经设置了观察者,使用$scope.$watch
这些变量中的每一个:
$scope.$watch('hours', function (newHours, oldHours, scope) {
if (newHours) {
var newEndDate = new Date(scope.origDate),
offHours = newEndDate.getHours();
newEndDate.setHours(offHours + newHours);
scope.endDate = newEndDate;
scope.endHours = newEndDate.getHours();
}
});
$scope.$watch('endHours', function (newEndHours, oldEndHours, scope) {
if (newEndHours) {
var newEndDate = new Date(scope.endDate);
newEndDate.setHours(newEndHours);
scope.endDate = newEndDate;
}
});
$scope.$watch('endDate', function (newEndDate, oldEndDate, scope) {
if (newEndDate) {
scope.hours = (newEndDate - scope.origDate) / (1000 * 60 * 60);
}
});
这些中的每一个都可以自己正常工作,但同时它们会造成很大的麻烦。根据我对 Angular 的理解,他们似乎正在创建一个“反馈循环”。编辑:也就是说,模型“A”将被更新并触发模型“B”的更改。然后模型“B”将触发模型“A”的更改。
现在,是否可以暂时暂停数据绑定,以便我可以在不触发观察者的情况下更新模型?在我工作过的其他一些环境中(想到 Cocoo 上的 UITableView),可以要求“停止更新”,对模型进行一些更改,然后“恢复更新”。
AngularJS中有这样的东西吗?如果没有,我没有得到什么,我如何设置我的项目以实现所需的功能?
这是我的例子的一个plunkr。