AngularJS, datatables, $ q.defer и перезагрузка данных - PullRequest
0 голосов
/ 22 февраля 2019

Я сталкиваюсь с проблемой при попытке правильно решить следующую ситуацию:

Когда контроллер загружается, он получает данные из 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 ()

Может кто-нибудь пожалуйстапокажи мне правильный способ разрешения такого случая?Спасибо

1 Ответ

0 голосов
/ 24 февраля 2019

Отвечая на мой собственный вопрос здесь ... вот что я сделал:

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

Таким образом, данные могут быть перезагружены сами по себе, и в то же время, часть данных ожидает выполнения первого обещания "проекта".

Надеясь, что это может помочь кому-то еще ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...