在AngularJS

时间:2017-02-11 09:30:25

标签: angularjs

每当程序运行时,它首先调用$scope方法,因此我无法获得任何将从$http方法加载Dbdata的数据。

var fileData = $http.get("JS/filesystemsdata.json").success(function (data) {
    $scope.DbData = data;
    $scope.isDBLoaded = true;
}).error(function (status) {
    alert(status);
    $scope.isDBLoaded = false;
});

var afterdata = $scope.getChilds("Common Files", "c,Program Files");
console.log(afterdata);

3 个答案:

答案 0 :(得分:1)

只需将您喜欢的功能添加到success承诺中,例如:

var fileData = $http.get("JS/filesystemsdata.json").success(function (data) {
  $scope.DbData = data;
  $scope.isDBLoaded = true;
  var afterdata = $scope.getChilds("Common Files", "c,Program Files");
}).error(function (status) {
alert(status);
  $scope.isDBLoaded = false;
});

答案 1 :(得分:1)

说明

与问题标题中的假设相反,代码中的函数将按指定顺序调用:

  • $http.get
  • $scope.getChilds

但是,$http.get成功错误回调是异步。这意味着当$http.get数据准备就绪时将调用这些函数。即这可能需要1毫秒,或者这也可能需要一分钟(例如) - 成功/错误回调将在需要时调用,而不会停止主线程。

解决方案

所以解决方法是将$scope.getChilds部分放在成功回调中。
我建议您详细了解回调和promises以便更好地理解。

旁注

不推荐使用AngularJS $http docssuccesserror方法,您应该使用then代替:

  

$http遗留承诺方法successerror已经存在   已弃用,将在v1.6.0中删除。使用标准then方法   代替

答案 2 :(得分:0)

如果你想在第一件事之后执行第二件事,那么你可以使用 $ promise 然后函数(然后是成功和错误的组合然后是新事物)

 var fileData = $http.get("JS/filesystemsdata.json").then(function(data){
    $scope.DbData = data;
    $scope.isDBLoaded = true;
    var afterdata = $scope.getChilds("Common Files", "c,Program Files");
    console.log(afterdata);
}, function(status){
    alert(status);
    $scope.isDBLoaded = false;
});

然后

https://docs.angularjs.org/api/ng/service/ $ HTTP

for $ q

https://docs.angularjs.org/api/ng/service/ $ Q