我有一个uib-tabset
,有四个标签:
<uib-tabset active="activeForm">
<uib-tab index="0" heading="One"><ng-include src="'one.html'"></ng-include></uib-tab>
<uib-tab index="1" heading="Two"><ng-include src="'two.html'"></ng-include></uib-tab>
<uib-tab index="2" heading="Three"><ng-include src="'three.html'"></ng-include></uib-tab>
<uib-tab index="3" heading="Four"><ng-include src="'four.html'"></ng-include></uib-tab>
</uib-tabset>
它有这个控制器:
$scope.tabs = [
{ title: 'One', route: 'one' },
{ title: 'Two', route: 'two' },
{ title: 'Three', route: 'three' },
{ title: 'Four', route: 'four' }
];
$scope.go = function(route) {
$state.go(route);
};
每个标签具有相同的结构。它们都包含UI-GRID,仅在它们包含的数据方面有所不同:
$scope.dataList = [];
$scope.selectedFile = null;
$scope.gridOpts = {
enableFiltering: true,
enableRowSelection: true,
enableRowHeaderSelection: false,
multiSelect: false,
modifierKeysToMultiSelect: false,
noUnselect: false,
columnDefs: [..my fields..],
onRegisterApi: function(gridApi) {
//set gridApi on scope
$scope.gridApi = gridApi;
gridApi.selection.on.rowSelectionChanged($scope,function(row){
$scope.selectedFile = row.entity;
// Switcher selezione/deselezione
if ($scope.atLeastOneIsSelected === false){
$scope.atLeastOneIsSelected = true;
} else {
$scope.atLeastOneIsSelected = false;
}
});
gridApi.selection.on.rowSelectionChangedBatch($scope,function(rows){
$scope.atLeastOneIsSelected = false;
});
$scope.getFirstData();
}
};
$scope.addGridData = function(datalist) {
$scope.dataList = $scope.dataList.concat(datalist);
$scope.gridOpts.data = $scope.dataList;
};
$scope.getMoreDataAsync = function(firstData) {
if ($scope.cancelPromise) {
$scope.cancelPromise.resolve();
}
$scope.cancelPromise = $q.defer();
TypeOneFileSrv.fileList.get(
{
userId: $scope.$stateParams.userId
}, function(data) {
if (data) {
$scope.addGridData(data);
blockUI.stop();
}
}, function(error) {
if (error) {
toaster.pop('error', 'Error', error);
}
}
);
};
$scope.getFirstData = function() {
blockUI.start('Loading 'ONE' tab...');
$scope.selectedFile = null;
$scope.dataList.length = 0;
$scope.getMoreDataAsync(true);
};
至少,这是调用服务器的服务。对于Controller,即使是四个选项卡的服务也是相同的,只在url中有所不同:
angular.module('app').factory('TypeOneFileSrv', ['$resource', function($resource) {
var typeOne = {
fileList: $resource('url_for_the_first_tab/:userId/?', {
userId: '@userId'
}, {
get: {
method: 'GET',
isArray: true
}
})
};
return typeOne;
}]);
我的问题就是这样,即使我在每个标签中添加了blockUI
,当我打开包含uib-tabset
的页面时,似乎有时它也不会加载所有数据。因为例如我看到前两个选项卡已填充表,但其他两个选项卡未填充。或者前两个和后一个,依此类推。
答案 0 :(得分:1)
请尝试如下所示。
<强> app.js 强>
注入ui.grid.autoResize
模块,如下所示。
var appModule = angular.module("app", [
'ui.grid.autoResize'
]);
<强> HTML 强>
使用ui-grid-auto-resize
指令,如下所示。
<div class="grid" ui-grid="vm.yourGridOptions" ui-grid-auto-resize></div>
<强> CSS 强>
为width
提供grid
,如下所示。
.grid {
width: 980px !important;
}