暂时挂起AngularJS中的数据绑定以更新模型而不触发$ scope。$ watch

时间:2013-04-19 06:49:52

标签: angularjs angularjs-scope

更新2012年4月19日下午12点太平洋标准时间:要在这个上吃乌鸦。问题不是Angular的数据绑定,而是计算日期的数学错误。我没有正确考虑计算时间的分钟和秒数。我只是减去彼此的时间戳,期待好几个小时出来。


我在AngularJS数据绑定方面遇到了麻烦,我的不同输入需要彼此相互绑定。

表单需要包含以下内容:

  1. 开始日期(这是给定的,而不是输入)
  2. 用于将小时数添加到开始日期的输入
  3. 两个输入结果:1)日期选择器和2)小时选择器
  4. 如果更改任何输入,则应更新其他输入。因此,以下结果将是理想的结果:

    1. (原始日期时间为4月19日晚上10点)。用户输入'1小时'。结果日期为4月19日,结果时间为晚上11点。

    2. 在上面的示例的基础上,用户将日期输入更改为4月20日。 '小时'现在变为25小时。

    3. 我已经在每个变量上使用$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”的更改。

      现在,是否可以临时暂停数据绑定,以便我可以只是更新模型而不会触发观察者?在我工作过的其他一些环境中(可以想到在Cocao上的UITableView),可以要求“停止更新”,对模型进行一些更改,然后“恢复更新。”

      AngularJS中有这样的东西吗?如果没有,我没有到达这里,我怎样才能设置我的项目以实现所需的功能?

      这是我的例子的plunkr

0 个答案:

没有答案