等待控制器运行其所有代码

时间:2018-04-13 11:22:02

标签: angularjs angularjs-controller

我想知道是否有一种方法让控制器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));
    })
  });

这是第一个加载的控制器(我知道它,因为在控制台上显示的第一件事是“控制器标签栏”),我正在使用setVariable函数保存我在localStorage上获得的数据,问题来了。

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显示运行他的代码需要尚未执行的代码{{1}那么,如何告诉我的控制器等待另一个控制器? (抱歉语法错误)。

1 个答案:

答案 0 :(得分: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;
     })
          
      });