Angular $ watch不会触发

时间:2016-03-29 12:57:06

标签: jquery angularjs angularjs-watch

我有 eonasdan datetimepicker的文字输入。有一个 bootstrap 工具提示。我想在datetimpicker处于活动状态时隐藏工具提示。

当datetime选择器处于活动状态时,有css类(.bootstrap-datetimepicker-widget)。我试图获得具有该css类的项目数。通过firebug进行调试时,我也得到了这个数字。 (我为datetimepicker和工具提示编写了angular指令)

.jsfile

    $scope.noOfDateTimePickers = $('.bootstrap-datetimepicker-widget').length;

    $scope.$watch('noOfDateTimePickers',function(newValue, oldValue){
      if(newValue>0){
        $('.dateTimePickerToolTips').removeAttr("data-original-titile");
      }else{
        $('.dateTimePickerToolTips').attr("data-original-titile", $scope.message);
      }
    });

.html fle

<div datetimepicker>
  <a class data-toggle="tooltip" ng-attr-title="{{tooltipMessage}}" tooltip>
    <input type="text" ng-model="startTime">
  </a>
</div>

如果我的代码存在问题,有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

你的问题是你的jQuery调用正在进行一次性DOM搜索,然后存储在你的$scope.noOfDateTimePickers中。由于DOM搜索是一次,因此$ scope变量永远不会改变,因为它永远不会调用你的触发函数。

$scope.noOfDateTimePickers = $('.bootstrap-datetimepicker-widget').length //Called once and is never updated

我的建议是找到一种方法来摆脱这个一次性的jQuery调用,以确定页面上的小部件数量,而是有一个对象数组,它们代表你的小部件并根据该对象执行逻辑。