Restangular 和 UI-Bootstrap 第一页显示为空白
Restangular and UI-Bootstrap first page appears blank
我目前正在掌握 Restangular,并且似乎取得了一些进展。我选择使用 UI-Bootstrap 是为了方便使用,因为我以前习惯使用 bootstrap。
我当前的问题是我的控制器有分页功能,但是当您第一次访问该页面时不会显示结果。如果我访问第二页然后返回到第一页,结果会按预期出现。如果我随后选择重新加载页面,则第一页上的结果不会出现。
我的代码如下:
app.controller('BillsListCtrl', function ($scope, BillRepository) {
$scope.filteredBills = [],
$scope.currentPage = 1,
$scope.itemsPerPage = 10;
$scope.bills = BillRepository.getList();
$scope.$watch('currentPage', function() {
var begin = (($scope.currentPage - 1) * $scope.itemsPerPage),
end = begin + $scope.itemsPerPage;
$scope.filteredBills = $scope.bills.slice(begin, end);
});
console.log($scope.filteredBills);
});
存储库:
app.factory('AbstractRepository', [
function () {
function AbstractRepository(restangular, route) {
this.restangular = restangular;
this.route = route;
}
AbstractRepository.prototype = {
getList: function (params) {
return this.restangular.all(this.route).getList(params).$object;
},
get: function (id) {
return this.restangular.one(this.route, id).get();
},
getView: function (id) {
return this.restangular.one(this.route, id).one(this.route + 'view').get();
},
update: function (updatedResource) {
return updatedResource.put().$object;
},
create: function (newResource) {
return this.restangular.all(this.route).post(newResource);
},
remove: function (object) {
return this.restangular.one(this.route, object.id).remove();
}
};
AbstractRepository.extend = function (repository) {
repository.prototype = Object.create(AbstractRepository.prototype);
repository.prototype.constructor = repository;
};
return AbstractRepository;
}
]);
设置 BillRepository:
app.factory('BillRepository', ['Restangular', 'AbstractRepository',
function (restangular, AbstractRepository) {
function BillRepository() {
AbstractRepository.call(this, restangular, 'bills');
}
AbstractRepository.extend(BillRepository);
return new BillRepository();
}
]);
如果您能就此问题提出任何建议,我们将不胜感激!
如果 $scope.filteredBills
是页面上显示的内容,则您仅在更改 currentPage 变量时填充该变量。当您的代码第一次运行时,您设置变量然后在其上设置监视,因此它不会更改并且 filteredBills 不会被设置。
感谢@ErikAGriffin 对此的帮助。
我在我的存储库中进行了更改并删除了 $object
,如下所示:
getList: function (params) {
return this.restangular.all(this.route).getList(params);
},
然后我的控制器变成了下面这样:
app.controller('BillsListCtrl', function ($scope, BillRepository) {
$scope.filteredBills = [],
$scope.currentPage = 1,
$scope.itemsPerPage = 10;
$scope.bills = BillRepository.getList().$object;
BillRepository.getList().then(function(data){
$scope.filteredBills = data.slice(0, $scope.itemsPerPage);
});
$scope.$watch('currentPage + itemsPerPage', function() {
var begin = (($scope.currentPage - 1) * $scope.itemsPerPage),
end = begin + $scope.itemsPerPage;
$scope.filteredBills = $scope.bills.slice(begin, end);
});
});
我目前正在掌握 Restangular,并且似乎取得了一些进展。我选择使用 UI-Bootstrap 是为了方便使用,因为我以前习惯使用 bootstrap。
我当前的问题是我的控制器有分页功能,但是当您第一次访问该页面时不会显示结果。如果我访问第二页然后返回到第一页,结果会按预期出现。如果我随后选择重新加载页面,则第一页上的结果不会出现。
我的代码如下:
app.controller('BillsListCtrl', function ($scope, BillRepository) {
$scope.filteredBills = [],
$scope.currentPage = 1,
$scope.itemsPerPage = 10;
$scope.bills = BillRepository.getList();
$scope.$watch('currentPage', function() {
var begin = (($scope.currentPage - 1) * $scope.itemsPerPage),
end = begin + $scope.itemsPerPage;
$scope.filteredBills = $scope.bills.slice(begin, end);
});
console.log($scope.filteredBills);
});
存储库:
app.factory('AbstractRepository', [
function () {
function AbstractRepository(restangular, route) {
this.restangular = restangular;
this.route = route;
}
AbstractRepository.prototype = {
getList: function (params) {
return this.restangular.all(this.route).getList(params).$object;
},
get: function (id) {
return this.restangular.one(this.route, id).get();
},
getView: function (id) {
return this.restangular.one(this.route, id).one(this.route + 'view').get();
},
update: function (updatedResource) {
return updatedResource.put().$object;
},
create: function (newResource) {
return this.restangular.all(this.route).post(newResource);
},
remove: function (object) {
return this.restangular.one(this.route, object.id).remove();
}
};
AbstractRepository.extend = function (repository) {
repository.prototype = Object.create(AbstractRepository.prototype);
repository.prototype.constructor = repository;
};
return AbstractRepository;
}
]);
设置 BillRepository:
app.factory('BillRepository', ['Restangular', 'AbstractRepository',
function (restangular, AbstractRepository) {
function BillRepository() {
AbstractRepository.call(this, restangular, 'bills');
}
AbstractRepository.extend(BillRepository);
return new BillRepository();
}
]);
如果您能就此问题提出任何建议,我们将不胜感激!
如果 $scope.filteredBills
是页面上显示的内容,则您仅在更改 currentPage 变量时填充该变量。当您的代码第一次运行时,您设置变量然后在其上设置监视,因此它不会更改并且 filteredBills 不会被设置。
感谢@ErikAGriffin 对此的帮助。
我在我的存储库中进行了更改并删除了 $object
,如下所示:
getList: function (params) {
return this.restangular.all(this.route).getList(params);
},
然后我的控制器变成了下面这样:
app.controller('BillsListCtrl', function ($scope, BillRepository) {
$scope.filteredBills = [],
$scope.currentPage = 1,
$scope.itemsPerPage = 10;
$scope.bills = BillRepository.getList().$object;
BillRepository.getList().then(function(data){
$scope.filteredBills = data.slice(0, $scope.itemsPerPage);
});
$scope.$watch('currentPage + itemsPerPage', function() {
var begin = (($scope.currentPage - 1) * $scope.itemsPerPage),
end = begin + $scope.itemsPerPage;
$scope.filteredBills = $scope.bills.slice(begin, end);
});
});