AngularJS,数据表,$ q.defer和数据重新加载

问题描述 投票:1回答:1

我正试图正确解决以下情况:

当控制器加载时,它从第2页数据表中的API(项目)获取数据,这些数据表只应在加载第一个数据时加载(获取项目地址和项目合作伙伴)但我可以将项目添加到任一地址或伙伴们,我想重新加载那部分。

我确实解决了这个问题,但我觉得这是多余的。

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()

有人可以告诉我解决这种情况的正确方法吗?谢谢

javascript angularjs angular-promise angular-datatables
1个回答
0
投票

在这里回答我自己的问题......这就是我所做的:

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())

这样,数据表可以自己重新加载,同时数据表部分等待第一个“项目”承诺。

希望这可以帮助别人......

© www.soinside.com 2019 - 2024. All rights reserved.