2015-11-02 25 views
0

我有一個模式,我想要顯示預選的行。但是,我不斷收到一個'無法讀取'網格的'未定義'錯誤。 UI網格在模態中定義,我用兩個不同的名稱聲明兩個網格Apis。這裏是我的代碼:無法讀取模態中未定義的屬性「網格」?

這將啓動模式:

//edit user group 
    $scope.editSelectedGroup = function(){ 
     //get the selected row 
     var row = $scope.gridApiInfo.selection.getSelectedRows(); 

     var modalInstance = $modal.open({ 
      animation: true, 
      templateUrl: 'userGroupModal.html', 
      controller: 'UserGroupModalController', 
      resolve: { 
       modalTitle: function() { 
        return "Edit User Group" 
       }, 
       allDepartments: function() { 
        return $scope.allDepartments; 
       }, 
       allRegions: function() { 
        return $scope.allRegions; 
       }, 
       isEdit: function(){ 
        return true; 
       }, 
       row: function(){ 
        return row[0]; 
       } 
      } 
     }); 

這是模態控制器:

.controller('UserGroupModalController',function($scope,$modalInstance,$modal,$window,modalTitle,allDepartments,allRegions,isEdit,row,referenceDataService){ 

    $scope.modalTitle = modalTitle; 
    $scope.isEdit = isEdit; 
    $scope.allDepartments= allDepartments; 
    $scope.allRegions = allRegions; 

    $scope.form= { 
     value: "", 
     description: "", 
     departments: [], 
     regions: [] 
    }; 

    $scope.departmentsGrid = { 
     enableRowSelection: true, 
     multiSelect: true, 
     enableRowHeaderSelection: false, 
     onRegisterApi: function(gridApi) { 
      $scope.deptGridApi= gridApi; 
     }, 
     columnDefs: [ 
      {name: 'Name', field: 'name'} 
     ], 
     data: $scope.allDepartments 
    }; 

    $scope.regionsGrid = { 
     enableRowSelection: true, 
     multiSelect: true, 
     enableRowHeaderSelection: false, 
     onRegisterApi: function(gridApi) { 
      $scope.gridApiRegions = gridApi; 
     }, 
     columnDefs: [ 
      {name: 'Name', field: 'name'} 
     ], 
     data: $scope.allRegions 
    }; 

    if ($scope.isEdit){ 
     $scope.form.value = row.value; 
     $scope.form.description = row.description; 

     //pushing selected depts 
     angular.forEach(row.departments, function(department) { 
      var deptElementPos=angular.findIndexOf($scope.allDepartments, department.id); 
      $scope.form.departments.push($scope.allDepartments[deptElementPos]); 
     }); 

     //pushing selected regions 
     angular.forEach(row.regions, function(region) { 
      var regionElementPos=angular.findIndexOf($scope.allRegions, region.id); 
      $scope.form.regions.push($scope.allRegions[regionElementPos]); 
     }); 

     //setting pre-selected rows 
     angular.forEach($scope.form.departments, function(department) { 
      $scope.deptGridApi.grid.rows.map(function (row) { 
       if (row.entity.id == department.id) { 
        row.setSelected(true); 
        $log.log("row selected: " + row.entity.id); 
       } 
      }); 
     }); 

     angular.forEach($scope.form.regions, function(region) { 
      $scope.gridApiRegions.grid.rows.map(function (row) { 
       if (row.entity.id == region.id) { 
        row.setSelected(true); 
        $log.log("row selected region: " + row.entity.id); 
       } 
      }); 
     }); 

     $scope.form.id = row.id; 
    } 

    $scope.close = function() { 
     $modalInstance.dismiss(); 
    }; 
}) 

當我點擊按鈕啓動模式,沒有模式顯示出來 - 而不是我得到一個控制檯錯誤,說'它'不能讀取屬性'網格'未定義'在$ scope.deptGridApi.grid.rows.map的行。任何人有任何建議如何解決這個問題?提前致謝!

編輯:使用deptGridApi和gridApiRegions入門選擇的行工作 - 我寫的通過點擊模式按鈕激活的測試功能,如下圖所示:

 $scope.getDeptandRegions= function(form){ 
      $log.log($scope.gridApiRegions.selection.getSelectedRows()); 
      $log.log($scope.deptGridApi.selection.getSelectedRows()) 
     }; 

這些日誌所選行正常,即使這樣也使用網格API。這是否僅在按下按鈕後纔會觸發?

回答

0
Cannot read property 'grid' of undefined' at the line with $scope.deptGridApi.grid.rows.map 

意味着:

$scope.deptGridApi === undefined 

看你的代碼,這是因爲onRegisterApi要麼是

  • 從來沒有所謂的
  • 調用與 「不確定」 作爲paramener

如果你可以提供一個工作代碼片段,我可能會更好地幫助你

+0

因此onRegisterApi在departmentsGrid內調用時,我聲明它 - 這不是正確的方式來聲明onRegisterApi?我是否將其分開並自行聲明? – user202925

+0

在你提供的'onRegisterApi'的代碼中沒有調用。它被聲明爲一個函數執行'$ scope.deptGridApi = gridApi;'但沒有任何一點我看到一個'$ scope.departmentsGrid.onRegisterApi(yourDeptGripApi)' – IggY

+0

嗯,我認爲它會自然調用,如文檔中所示,當網格被創建爲其回調函數:http://ui-grid.info/docs/#/tutorial/102_sorting ...我試圖分離出來: '$ scope.departmentsGrid.onRegisterApi = function(gridApi) $ scope.deptGridApi = gridApi; };' 但在控制檯中,它似乎只是跳過OnRegisterApi的主體。 – user202925

相關問題