Подождите, пока контроллер запустит весь свой код

Я хочу знать, есть ли способ, который позволяет контроллеру 2 ждать, пока контроллер 2 завершит выполнение всего своего кода. Я делаю мобильное приложение, когда пользователь входит в систему, приложение переходит на домашнюю страницу, на которой есть панель вкладок, которая загружает 4 контроллера, но они загружаются одновременно, контроллер 1 загружает часть, затем контроллер 2 показывает загрузку еще проблема в том что я делаю HTTP запросить данные и заполнить HTML данными.

aldro_app.controller('ctrTabBarOpciones', function($scope, compartidosFactory, $http, $rootScope){

console.log('controller tabbar');

$scope.comprobarTab = function (tab) {
    compartidosFactory.tab = tab;
}

    var id = parseInt(getVariable("idcontrato"));
    var url = "http://api/info";
    $http({
    url : url,
    method: "POST",
    data: {id_contrato: id},
    headers:{
     "Content-Type":"application/json;charset=utf-8",
     "Authorization": "Bearer " + getVariable("token")
    }
    })
    .then(function(response){
    console.log("Facturas del contrato -> " + id + "son: " + response.data);
    setVariable("facturas" , JSON.stringify(response.data));
    })
  });

это первый контроллер, который загружается (я знаю это, потому что на консоли первое, что нужно показать, это "панель вкладок контроллера"), и я сохраняю данные, полученные на localStorage, с помощью setVariable функция, проблема приходит сюда.

aldro_app.controller('ctrInicio', function ($scope,$http, $rootScope) {
     /* Http para retirar las ultimas facturas del contrato */
     console.log("Inicio controller");
     //console.log(x.facturas.length);
           var objeto = getVariable("facturas");
           deleteVariable("facturas");
           var listado_facturas = JSON.parse(objeto);
           var arr_length = listado_facturas.facturas.length;
      });

Я получаю ошибку Cannot read property 'facturas' of undefined потому что мой ctrTabbarOpciones загружает сначала, но потом мой ctrInicio показывает выполнение своего кода, который нуждается в коде, который еще не был выполнен в ctrTabbarOpciones Итак, как сказать моему контроллеру ждать другого контроллера? (Извините за грамматические ошибки).

1 ответ

Решение

Вы можете транслировать событие с первого контроллера и прослушивать его на втором контроллере. 3

aldro_app.controller('ctrTabBarOpciones', function($scope, compartidosFactory, $http, $rootScope){

console.log('controller tabbar');

$scope.comprobarTab = function (tab) {
    compartidosFactory.tab = tab;
}

    var id = parseInt(getVariable("idcontrato"));
    var url = "http://api/info";
    $http({
    url : url,
    method: "POST",
    data: {id_contrato: id},
    headers:{
     "Content-Type":"application/json;charset=utf-8",
     "Authorization": "Bearer " + getVariable("token")
    }
    })
    .then(function(response){
    console.log("Facturas del contrato -> " + id + "son: " + response.data);
    setVariable("facturas" , JSON.stringify(response.data));
        $rootScope.$broadcast('received data'); // broadcast event
    })
  });

aldro_app.controller('ctrInicio', function ($scope,$http, $rootScope) {
     /* Http para retirar las ultimas facturas del contrato */
     console.log("Inicio controller");
     //console.log(x.facturas.length);
     $rootScope.$on('receivedData', function(){
      var objeto = getVariable("facturas");
           deleteVariable("facturas");
           var listado_facturas = JSON.parse(objeto);
           var arr_length = listado_facturas.facturas.length;
     })
          
      });

Другие вопросы по тегам