Javascript angular 1.5访问http.get中的数据,无作用域

Javascript angular 1.5访问http.get中的数据,无作用域,javascript,angularjs,get,angular-promise,Javascript,Angularjs,Get,Angular Promise,我使用的是Angular 1.5 我无法从http.get访问数据,无法从http.get访问数据。 让我解释一下: 我有我的组件: (function(){ 'use strict'; class myComponent { constructor( $http, $scope) { var self = this; self.test="this is a test"; $http.get(MYA

我使用的是Angular 1.5

我无法从http.get访问数据,无法从http.get访问数据。 让我解释一下:

我有我的组件:

(function(){
'use strict';
class myComponent {
    constructor(
        $http,
        $scope)
    {
        var self = this;
        self.test="this is a test";
        $http.get(MYAPI).then(function(response){
        self.MYDATA = response.data;
        console.log(self.MYDATA)
        });
        console.log(self.test)
        console.log(self.MYDATA)
    }

}
angular.module('myApp')
.component('myApp.test', {
    templateUrl: 'myTemplate.html',
    controller: myComponent,
    controllerAs:'vm',
}); 
})();
console.Log给我:

这是一个测试-->用于测试

未定义-->输出http.get

http.get中的对象{id:1…}-->


因此,我无法通过http.get访问我的数据,这就是我想要的。

$http.get
是一个异步调用,意味着程序执行不会等待从服务器获取数据

因此,在执行位于
$http.get()
之外的
console.log(self.MYDATA)
时,数据尚未从服务器中获取,这就是为什么会出现
未定义错误的原因

要解决此问题或处理异步调用,可以执行以下操作:

 var promise = $http.get(MYAPI);
然后在回调的帮助下以以下方式访问数据:

  promise.then(
            function successCallBack(response)
                {
                   self.MYDATA = response.data;
                   console.log(self.MYDATA)
                }
            ).then(
                function errorCallBack(response)
                {
                    console.log(response);
                }           
            );

这里有一篇很好的文章可以帮助你

请求是异步的,因此分配尚未发生。日志的顺序应该允许您查看此。。。你会注意到回调中的那一个是最后一个被触发的,尽管它是可读顺序中的第一个。没错,我没有注意到,谢谢。你有没有关于将数据输入控制器的线索?这很有效,谢谢。但我不知道为什么,我不能在子组件中使用它。我可以访问子控制器中的self.test,但不能访问self.MYDATA。但也许这个问题并不相关。我必须先把承诺寄到孩子身上,然后再做承诺。然后(),这很有效,但不是很好。或者可以直接从self.MYDATA发送数据吗?您可以将promise声明为
global
变量,然后您可以通过回调来访问整个脚本中的
response
,或者您可以创建一个服务,而不是子组件,然后将
response
作为参数发送给该服务。由于服务电话是同步的,所以这将起作用。谢谢。这对我有帮助