Angularjs $scope.watch被调用的次数太多

Angularjs $scope.watch被调用的次数太多,angularjs,angularjs-scope,ng-controller,Angularjs,Angularjs Scope,Ng Controller,我以为我已经解决了这个问题,但事实证明我没有,所以如果能提供任何帮助,我将不胜感激 基本上,我的控制器和作用域有问题,这导致在我不想调用$scope.$watch()时调用它 我有一个角度视图(html),带有使用不同控制器和视图的下拉和分页标记 首先,我有:(其中form_item_Division.html只是一个Divisions下拉列表) 当我从下拉列表中选择一个分区并用分页标签滚动页面时,一切都很好。但是,当我滚动浏览一个有多个页面的分区的页面,然后返回并选择另一个分区时,显示的结果不

我以为我已经解决了这个问题,但事实证明我没有,所以如果能提供任何帮助,我将不胜感激

基本上,我的控制器和作用域有问题,这导致在我不想调用$scope.$watch()时调用它

我有一个角度视图(html),带有使用不同控制器和视图的下拉和分页标记

首先,我有:(其中form_item_Division.html只是一个Divisions下拉列表)

当我从下拉列表中选择一个分区并用分页标签滚动页面时,一切都很好。但是,当我滚动浏览一个有多个页面的分区的页面,然后返回并选择另一个分区时,显示的结果不正确。我想这是因为我的$scope.$watch()在我不想调用的时候被调用了。我想我没有为这种情况妥善安排控制器。无论如何,任何帮助都是非常感激的

谢谢


Pete

您可以比较您正在观察的变量的变化

    $scope.$watch("currentPage", function (oldVal,newVal) {
        if(newVal!==oldVal){
               if ($scope.itemsByUserDivision != null) {
               $scope.itemsByUserDivision = originalItems;
               var pagedData =$scope.itemsByUserDivision.slice(($scope.currentPage -  
         1) * $scope.itemsPerPage, $scope.currentPage *  $scope.itemsPerPage);
         $scope.itemsByUserDivision = pagedData;
     }
   }  
     });

嗨,维德,我试过这么做,但没能做到。你能说得更具体一点吗?你还面临问题吗?
<div ng-controller="DashboardIEPItemDraftCtrl">
<div ng-include="'app/dashboard/iepitem_table1.html'" ng-if="numberOfItemsByUserDivision > 0"></div>

        <div class="col-xs-12 text-center" ng-show="totalNumberPages > 1">
            <pagination items-per-page="itemsPerPage"
                    total-items="numberOfItemsByUserDivision"
                    ng-model="currentPage"
                    max-size="3"
                    boundary-links="true"
                    rotate="false"
                    class="pagination-sm panel-shad-1"
                    num-pages="totalNumberPages"
                    previous-text="&lsaquo;"
                    next-text="&rsaquo;"
                    first-text="&laquo;"
                    last-text="&raquo;">
            </pagination>
        </div>
</div>
<table class="table table-condensed table-striped table-hover" ng-controller="IEPItemTableCtrl">

   (table layout defined here)

</table>
$scope.getItemsBySelectedDivision = function (selectedDivisionId) {
   blah.get({ count: true, filter: 'DivisionPerformingId eq ' +   
   selectedDivisionId }).$promise.then(
      function (response) {
         $scope.itemsByUserDivision.length = 0;
         $scope.itemsByUserDivision = response.value;
         $scope.numberOfItemsByUserDivision = response.value.length;
         $scope.totalNumberPages = Math.ceil(response.value.length /    
         $scope.itemsPerPage);
         var pagedData = $scope.itemsByUserDivision.slice(0, 
         $scope.itemsPerPage);
         $scope.itemsByUserDivision = pagedData;
      },
      function (error) {
          // Do something when it errors
      });
        };

$scope.$watch("currentPage", function () {
   if ($scope.itemsByUserDivision != null) {
     $scope.itemsByUserDivision = originalItems;
     var pagedData = $scope.itemsByUserDivision.slice(($scope.currentPage -  
     1) * $scope.itemsPerPage, $scope.currentPage * $scope.itemsPerPage);
     $scope.itemsByUserDivision = pagedData;
 }
 });
    $scope.$watch("currentPage", function (oldVal,newVal) {
        if(newVal!==oldVal){
               if ($scope.itemsByUserDivision != null) {
               $scope.itemsByUserDivision = originalItems;
               var pagedData =$scope.itemsByUserDivision.slice(($scope.currentPage -  
         1) * $scope.itemsPerPage, $scope.currentPage *  $scope.itemsPerPage);
         $scope.itemsByUserDivision = pagedData;
     }
   }  
     });