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。這是否僅在按下按鈕後纔會觸發?
因此onRegisterApi在departmentsGrid內調用時,我聲明它 - 這不是正確的方式來聲明onRegisterApi?我是否將其分開並自行聲明? – user202925
在你提供的'onRegisterApi'的代碼中沒有調用。它被聲明爲一個函數執行'$ scope.deptGridApi = gridApi;'但沒有任何一點我看到一個'$ scope.departmentsGrid.onRegisterApi(yourDeptGripApi)' – IggY
嗯,我認爲它會自然調用,如文檔中所示,當網格被創建爲其回調函數:http://ui-grid.info/docs/#/tutorial/102_sorting ...我試圖分離出來: '$ scope.departmentsGrid.onRegisterApi = function(gridApi) $ scope.deptGridApi = gridApi; };' 但在控制檯中,它似乎只是跳過OnRegisterApi的主體。 – user202925