2016-05-23 44 views
0

,我發現了以下錯誤:試圖讓數組定義

angular.min.js:114TypeError: Cannot read property 'slice' of undefined at templateController.js:28 

這是因爲該行的代碼:

$scope.filteredTemplates = $scope.templates.slice(begin, end); 

這裏是我的代碼:

var template = angular.module('TemplateCtrl',['ui.bootstrap']); 

template.controller('TemplateController',function($scope, Template){ 
    var getTemplates = Template.all(); 
    $scope.filteredTemplates = []; 
    $scope.currentPage = 1; 
    $scope.numPerPage = 10; 
    $scope.maxSize = 5; 

    getTemplates.success(function(response){ 
     if(response[0] == 200){ 
      $scope.templates = response[1]; 

     }else{ 
      //user wasn't logged in to view the templates (voorbeeld contracten) 
      console.log('Please log in'); 
     } 
    }); 

    $scope.numPages = function() { 
     return Math.ceil($scope.templates.length/$scope.numPerPage); 
     }; 

    $scope.$watch('currentPage + numPerPage', function() { 
     var begin = (($scope.currentPage - 1) * $scope.numPerPage) 
     , end = begin + $scope.numPerPage; 

     $scope.filteredTemplates = $scope.templates.slice(begin, end); 
     }); 
}); 

我試圖在$scope.templates中對我的數組進行分頁。

因此,我使用$watch()方法來查看用戶在哪個頁面上。並根據用戶點擊的頁面在$scope.templates中對數組進行切片。

但是,我正在使用回調,如您在.success()方法中看到的。而回調的問題是你不知道什麼時候執行。

因此,$watch()首先被執行,並看到$scope.templates是不確定的。很高興我想問問,如果有人知道我仍然可以使這個分頁工作?

回答

1

看起來你的手錶在getTemplates得到解決之前得到執行。所以你沒有$ scope.templates。定義$ scope.template = [];只有在$ scope.template.length> 0時才執行切片0

$scope.templates = []; 
$scope.$watch('currentPage + numPerPage', function() { 
    var begin = (($scope.currentPage - 1) * $scope.numPerPage) 
    , end = begin + $scope.numPerPage; 
    if($scope.templates.length>0){ 
     $scope.filteredTemplates = $scope.templates.slice(begin, end); 
    } 
    });