Вот контроллер... Там есть то самое "листание". А вот как брать данные на сервере - уже вопрос к твоей СУБДшке.
/* Контроллер */
var app = angular.module('app', []);
app.controller(
'ctrl',
[
'$scope',
'$interval',
'$http',
function($scope,$interval, $http) {
$http.get('json/begin.csp').success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
});
$scope.base=$('#sys-base').val();
var url='json/side.csp?base='+$scope.base;
$http.get(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
var i=getIndex();
getDefine($scope.side.list[i].code);
});
getMessage();
getDate();
var in_date=$interval(getDate,1000);
var in_message=$interval(getMessage,3000);
$scope.selectDctRow=function(N){
/* Выбор строки справочника */
var i=getDctRow();
if (i==N) {
i=$scope.dct.rows[N].grp;
if (i=='') {
$('#'+$scope.field).val($scope.dct.rows[N].value);
$scope.closeDct();
} else {
var url='/soi/sys/json/dct.csp';
url+='?code='+$scope.dct.code;
url+='&group='+i;
$http.get(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
});
};
return;
};
if (i!=undefined) {
$scope.dct.rows[i].on=0;
};
$scope.dct.rows[N].on=1;
};
/* Номер текущей строки в таблице справочника */
function getDctRow(){
for(var i=0; i<$scope.dct.rows.length; i++){
if ($scope.dct.rows[i].on==1){
return i;
};
};
};
$scope.openDct=function(Code,N){
/* Вызов справочника */
if (Code=='') {
return;
};
$scope.field='sys-find'+N;
$('#sys-blackout').show();
$('#sys-dictionary').show();
var url='/soi/sys/json/dct.csp';
url+='?code='+Code;
$http.get(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
});
};
$scope.levelDct=function(){
/* Вернуться в справочнике на уровень вверх */
var url='/soi/sys/json/dct.csp';
url+='?code='+$scope.dct.code;
$http.get(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
});
};
$scope.closeDct=function(){
/* Закрыть справочник */
$scope.dct={};
$('#sys-dictionary').hide();
$('#sys-blackout').hide();
};
$scope.find=function(Type){
/* Выполнить поиск */
var url='json/find.csp';
var prm=$('#sys-find').serialize()
url+='?='+prm;
url+='&type='+Type;
url+='&base='+$scope.base;
var ind=getIndex();
ind=$scope.side.list[ind].code
url+='&index='+ind;
$http.post(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
$scope.data[0].on=1;
});
};
$scope.upPage=function(){
/* Перейти на предыдущую страницу */
if ($scope.tableBeg==1) {
return;
};
getData('page',-1);
};
$scope.downPage=function(){
/* Перейти на следущую страницу */
if ($scope.tableEnd==1) {
return;
};
getData('page');
};
$scope.upLine=function(){
/* Перейти на предыдущую строку */
if ($scope.lineBeg==1) {
return;
};
var i=getRow();
if (i==undefined) {
$scope.data[0].on=1;
if ($scope.tableBeg==1) {
$scope.lineBeg=1;
};
return;
};
if (i>0) {
$scope.data[i].on=0;
$scope.data[--i].on=1;
$scope.lineEnd=0;
if (($scope.tableBeg==1)&&(i==0)) {
$scope.lineBeg=1;
};
return;
};
getData('line',-1);
};
$scope.downLine=function(){
/* Перейти на следущую строку */
if ($scope.lineEnd==1) {
return;
};
var i=getRow();
if (i==undefined) {
$scope.data[$scope.data.length-1].on=1;
if (($scope.tableEnd==1)&&((i+1)==$scope.data.length)) {
$scope.lineEnd=1;
};
return;
};
if (i<($scope.data.length-1)) {
$scope.data[i].on=0;
$scope.data[++i].on=1;
$scope.lineBeg=0;
if (($scope.tableEnd==1)&&((i+1)==$scope.data.length)) {
$scope.lineEnd=1;
};
return;
};
getData('line');
};
$scope.headButton=function(N){
/* Нажали кнопку в верхнем меню */
if ($scope.headBtns[N].id=='sys-head-menu') {
top.location='/soi/sys/general/menu/page.csp?base='+$scope.base;
};
};
$scope.selectRow=function(N){
/* Смена текущей строки */
if ($scope.data[N].on==1){
return;
};
var i=getRow();
if (i!=undefined) {
$scope.data[i].on=0;
}
$scope.lineBeg=0;
$scope.lineEnd=0;
if ((N==0)&&($scope.tableBeg==1)) {
$scope.lineBeg=1;
}
if ((N==($scope.data.length-1))&&($scope.tableEnd==1)) {
$scope.lineEnd=1;
}
$scope.data[N].on=1;
getRelations($scope.data[N].urn);
};
$scope.selectIndex=function(N){
/* Смена индекса */
if ($scope.side.list[N].on==1){
return;
};
var i=getIndex();
if (i!=undefined) {
$scope.side.list[i].on=0;
};
$scope.side.list[N].on=1;
getDefine($scope.side.list[N].code);
};
/* Запросить данные по структуре индекса */
function getRelations(Urn){
var url='json/relations.csp';
url+='?base='+$scope.base;
url+='&urn='+Urn;
$http.post(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
});
};
/* Запросить данные по структуре индекса */
function getDefine(Code){
var url='json/define.csp';
url+='?base='+$scope.base;
url+='&index='+Code;
$http.post(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
datepicker();
getData();
});
};
/* Страницу с данными по индексу картотеки */
function getData(Type,Order){
Type=Type||'init';
Order=Order||1;
var url='json/data.csp';
url+='?base='+$scope.base;
var ind=getIndex();
ind=$scope.side.list[ind].code
url+='&index='+ind;
url+='&type='+Type;
url+='&order='+Order;
$http.post(url).success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
if (Type=='line') {
var i=(Order==1)? $scope.data.length-1: 0;
$scope.data[i].on=1;
};
});
};
/* Номер текущей строки в таблице */
function getRow(){
for(var i=0; i<$scope.data.length; i++){
if ($scope.data[i].on==1){
return i;
};
};
};
/* Номер текущего индекса */
function getIndex(){
for(var i=0; i<$scope.side.list.length; i++){
if ($scope.side.list[i].on==1){
return i;
};
};
};
/* Запросить серверную дату и время */
function getDate(){
$http.get('/soi/sys/json/date.csp').success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
});
};
/* Запросить список сообщений */
function getMessage(){
$http.get('/soi/sys/json/message.csp').success(function(data) {
for (key in data) {
$scope[key] = data[key];
};
});
};
}
]
);
/* Для выделения элементов списка/таблицы */
app.filter(
'selected',
function(){
return function(Obj){
return (Obj.on==1)? 'sys-on': '';
}
}
);
/* Состояние кнопок навигации по списку/таблице */
app.filter(
'condition',
function(){
return function(Value){
return (Value==1)? 'sys-off': '';
}
}
);
/* Тип пиктограммы в окне справочника */
app.filter(
'dictionary',
function(){
return function(Value){
Value=Value.charAt(0).toLowerCase();
return (Value=="d")? "sys-dct2": "sys-dct1";
}
}
);