AngularJS、数据表、$q.defer 和数据重新加载
AngularJS, datatables, $q.defer and data reload
我在尝试正确解决以下情况时遇到问题:
当控制器加载时,它从 API(一个项目)获取数据
我在第 2 页上的数据表应该仅在加载第一个数据时加载(获取项目地址和项目合作伙伴),但随后我可以将项目添加到地址或合作伙伴,然后我想重新加载该部分。
我确实是这样解决的,但我觉得它是多余的。
Project.findOne({filter:{where:{nr: $stateParams.projectNr}}},function(result){
$scope.data = result;
AddressLink.find({filter: {where: {projectId: $scope.data.id}}},function(addresses){
deferAddresses.resolve(addresses);
});
});
var deferAddresses = $q.defer();
var deferPartners = $q.defer();
$scope.dtOptions = DTOptionsBuilder.fromFnPromise(function() {
if ($scope.data.id) {
var defer = $q.defer();
AddressLink.find({filter: {where: {projectId: $scope.data.id}}},function(addresses){
defer.resolve(addresses);
});
return defer.promise;
} else {
return deferAddresses.promise;
}
})
$scope.nested.dtInstance = {};
$scope.nested.dtInstance.reloadData(null, false);
<table datatable dt-options="dtOptions" dt-instance="nested.dtInstance" dt-columns="dtColumns" class="table-striped table-bordered hover" ng-model="dtInstance">
我是
的 2 倍
AddressLink.find()
有人可以告诉我解决这种情况的正确方法吗?
谢谢
在这里回答我自己的问题...这就是我所做的:
var promiseProject = new Promise(function(resolve, reject){
Project.findOne({filter:{where:{nr: $stateParams.projectNr}}},function(result){
resolve(result);
});
});
$scope.loadAddress = function(){
var defer = $q.defer();
promiseProject.then(function(data){
AddressLink.find({filter: {where: {projectId: data.id}, include: 'address'}},function(addresses){
defer.resolve(addresses);
});
});
return defer.promise;
}
$scope.dtOptions = DTOptionsBuilder.fromFnPromise($scope.loadAddress())
这样数据表可以自行重新加载,同时数据表部分等待第一个 "project" 承诺。
希望这可以帮助其他人...
我在尝试正确解决以下情况时遇到问题:
当控制器加载时,它从 API(一个项目)获取数据 我在第 2 页上的数据表应该仅在加载第一个数据时加载(获取项目地址和项目合作伙伴),但随后我可以将项目添加到地址或合作伙伴,然后我想重新加载该部分。
我确实是这样解决的,但我觉得它是多余的。
Project.findOne({filter:{where:{nr: $stateParams.projectNr}}},function(result){
$scope.data = result;
AddressLink.find({filter: {where: {projectId: $scope.data.id}}},function(addresses){
deferAddresses.resolve(addresses);
});
});
var deferAddresses = $q.defer();
var deferPartners = $q.defer();
$scope.dtOptions = DTOptionsBuilder.fromFnPromise(function() {
if ($scope.data.id) {
var defer = $q.defer();
AddressLink.find({filter: {where: {projectId: $scope.data.id}}},function(addresses){
defer.resolve(addresses);
});
return defer.promise;
} else {
return deferAddresses.promise;
}
})
$scope.nested.dtInstance = {};
$scope.nested.dtInstance.reloadData(null, false);
<table datatable dt-options="dtOptions" dt-instance="nested.dtInstance" dt-columns="dtColumns" class="table-striped table-bordered hover" ng-model="dtInstance">
我是
的 2 倍AddressLink.find()
有人可以告诉我解决这种情况的正确方法吗? 谢谢
在这里回答我自己的问题...这就是我所做的:
var promiseProject = new Promise(function(resolve, reject){
Project.findOne({filter:{where:{nr: $stateParams.projectNr}}},function(result){
resolve(result);
});
});
$scope.loadAddress = function(){
var defer = $q.defer();
promiseProject.then(function(data){
AddressLink.find({filter: {where: {projectId: data.id}, include: 'address'}},function(addresses){
defer.resolve(addresses);
});
});
return defer.promise;
}
$scope.dtOptions = DTOptionsBuilder.fromFnPromise($scope.loadAddress())
这样数据表可以自行重新加载,同时数据表部分等待第一个 "project" 承诺。
希望这可以帮助其他人...