Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 等待控制器运行其所有代码_Angularjs_Angularjs Controller - Fatal编程技术网

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

Angularjs 等待控制器运行其所有代码,angularjs,angularjs-controller,Angularjs,Angularjs Controller,我想知道是否有一种方法可以让控制器2等待控制器2完成其所有代码的运行。 Im制作移动应用程序,当用户登录时,该应用程序会进入主页,主页上有一个选项卡栏,可以加载4个控制器,但它们同时加载所有控制器,控制器1加载一部分,然后控制器2显示加载更多,问题是我发出HTTP请求以获取数据并用数据填充HTML aldro_app.controller('ctrTabBarOpciones', function($scope, compartidosFactory, $http, $rootScope){

我想知道是否有一种方法可以让控制器2等待控制器2完成其所有代码的运行。 Im制作移动应用程序,当用户登录时,该应用程序会进入主页,主页上有一个选项卡栏,可以加载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;
      });

我遇到了一个错误,
无法读取未定义的属性“facturas”
,因为我的
Crtaboropciones
首先加载,但随后我的
ctrInicio
显示运行他的代码,该代码需要在
Crtaboropciones
中尚未执行的代码,如何告诉我的控制器等待另一个控制器?(很抱歉出现语法错误)。

您可以从第一个控制器广播事件,然后在第二个控制器上收听。三,

aldro_应用程序控制器('CTRTABROPCIONES',函数($scope,compartidosFactory,$http,$rootScope){
console.log('controller tabbar');
$scope.comprobarTab=函数(选项卡){
compartidosFactory.tab=tab;
}
var id=parseInt(getVariable(“idcontrato”);
变量url=”http://api/info";
$http({
url:url,
方法:“张贴”,
数据:{id_contato:id},
标题:{
“内容类型”:“应用程序/json;字符集=utf-8”,
“授权”:“持有人”+getVariable(“令牌”)
}
})
.然后(功能(响应){
console.log(“合同事实->”+id+“子:”+response.data);
setVariable(“facturas”,JSON.stringify(response.data));
$rootScope.$broadcast('received data');//广播事件
})

});ctrInicio
之后执行
ctrTabBarOpciones
中的code>My
HTTP
请求,但是您现在正在触发一个事件并在ctrInicio中侦听它,因此它不应该导致任何问题。无论何时您获得数据,它都会在ctrInicio中执行函数这在某种程度上实现了这一点,现在的问题是,我正在尝试稍后在我的ctrInicio中访问
listado_facturas
,现在一个愚蠢的问题可能是,在我的$on事件中,我可以声明另一个函数吗?