AngularJS $ watch不适用于分页,给出未定义的错误

时间:2015-01-19 19:34:17

标签: angularjs

我是angularjs世界中的新蜜蜂。我试图在我的代码中使用一些分页逻辑。

在使用$ watch时,我的应用会在$ watch

上投掷TypeError: undefined is not a function
  .controller("EmployeeListCtrl", ["employeeResource", EmployeeListCtrl]);

  function EmployeeListCtrl(employeeResource) {
      var Empdata = this;
      Empdata.employeePerPage = [];

      employeeResource.query(function(data){
          Empdata.employee = data;          
      });

      Empdata.currentPage = 1;
      Empdata.numPerPage = 10;
      Empdata.maxSize = 5;

      Empdata.numPages = function() {
          return Math.ceil(Empdata.employee.length / Empdata.numPerPage);
      };

      Empdata.$watch('Empdata.currentPage + Empdata.numPerPage', function() {
          var start = ((Empdata.currentPage - 1) * Empdata.numPerPage),
              end   =  start + Empdata.numPerPage;
          Empdata.employeePerPage = Empdata.employee.slice(begin, end);   

      });
  }

因为我使用控制器作为我没有使用$ scope,也许情况会是这样的?

对使用$ scope vs controller作为有什么意见吗? 因为我们就这个 什么是推荐 <范围或控制器

3 个答案:

答案 0 :(得分:0)

$watch$scope的一种方法,所以这就是你的问题。解决方案是注入$scope,以便您可以在对象上使用$watch函数。请参阅此问题和答案:Angularjs: 'controller as syntax' and $watch

答案 1 :(得分:0)

Empdata不是Angular对象,它没有$watch方法。您需要将其设为控制器$scope的属性。

$scope.Empdata = {};
$scope.$watch('Empdata.currentPage + Empdata.numPerPage', function() { ... });

答案 2 :(得分:0)

每当您想在使用controller as时使用$ watch时,您需要使用angular.bind

将此变量显式绑定到范围

<强> CODE

 $scope.$watch(angular.bind(Empdata, function () {
    return 'Empdata.currentPage + Empdata.numPerPage'; 
  }), function (newVal, oldVal) {
    // now we will pickup changes to newVal and oldVal
  });

由于