为什么我在http之后的angularjs变量中得到null值

时间:2017-02-27 05:39:03

标签: javascript angularjs angularjs-directive angularjs-scope

我使用Angularjs作为前端 我已经定义了ttest调用之前定义的变量$http。 之后,我将数据分配给此变量。

ttest[0]$http函数中有值,但外面没有可用的值

angular.module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
  .controller('AppCtrl', function($scope,$http,$log) {
    var imagePath = 'img/list/60.jpeg';

  var ttest=[];
var url = "https://www.w3schools.com/angular/customers.php";

$http.get(url).then(function(response) {
        ttest = response.data;
  $scope.messages =ttest
  $log.info(ttest[0]);

    });

  $log.info(ttest[0]);


  });

3 个答案:

答案 0 :(得分:1)

//Check the below comment ,you will find out what are you doing wrong 
angular.module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
  .controller('AppCtrl', function($scope,$http,$log) {
    var imagePath = 'img/list/60.jpeg';

  var ttest=[];
var url = "https://www.w3schools.com/angular/customers.php";

$http.get(url).then(function(response) {
  //      ttest = response.data;
        ttest = response.records; <-- change data to records
  $scope.messages =ttest
  $log.info(ttest[0]);

    });

  $log.info(ttest[0]);


  });

答案 1 :(得分:0)

您正在进行的HTTP请求是异步的,这意味着它是非阻塞的。因此,在发送请求之前,会执行下面的代码。做这样的事情:

angular.module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
  .controller('AppCtrl', function($scope,$http,$log) {
    var imagePath = 'img/list/60.jpeg';

  var ttest=[];
var url = "https://www.w3schools.com/angular/customers.php";

$http.get(url).then(function(response) {
        ttest = response.data;
  $scope.messages =ttest
  $log.info(ttest[0]);

$scope.yourCallback(); // do whatever you want to do here in this function

    });

  }); 

答案 2 :(得分:0)

在javascript范围内变量是功能性的。由于then是回调函数,ttest不在范围之外。

您可以在范围之外创建更新ttest变量的函数,并从当时的回调函数中调用它。