角分享可变悫$ http.get和控制器[复制](Angular Share Variable be

2019-10-21 17:07发布

这个问题已经在这里有一个答案:

  • 如何返回从一个异步调用的响应? 36个回答

我无法通过一个变量里面的内容$http.get()这个方法之外......它总是undefined

我测试$rootScope ,但没有奏效。

controller('myControl', function ($scope, $http) {
    var content;

    $http.get('../Json/data.json').success(function (data, content) {
        content = data;
    }).error(function (data, status, headers, config) {
        $scope.dataJson = "ERROR";
    });

    console.log(content); 
});

Answer 1:

这里有两个问题:

  • content在您的成功处理程序参数被遮蔽content在你的控制变量。
  • 您正在尝试写content到控制台它有一个值之前。 这不会起作用,因为$http.get()是异步的。

要解决这些问题:

  • 删除content参数。 这也是没有用处的。
  • 使用content变量里面success的回调。
controller('myControl', function ($scope, $http) {
    var content;

    $http.get('../Json/data.json').success(function (data) {
        content = data;

        console.log(content);
        $scope.dataJson = content;
    }).error(function (data, status, headers, config) {
        $scope.dataJson = "ERROR";
    });
});


Answer 2:

首先,你不等待异步$http.get()来完成这样console.log()总是会打印出undefined

其次,也许你可以考虑使用then()而不是success()
http://bit.ly/18xIHio

以下应该只是罚款你。

/* JS */
app.controller('myControl', function($http) {
    var ctrl = this;

    $http.get('http://www.data.fi/data.json').then(function (response) {
        ctrl.content = response; // use response.data to get the payload
    }).catch(function (error) {
        ctrl.content = error;
    }).finally(function() {
        console.log(ctrl.content); 
    });
});

<!-- HTML -->
<div ng-controller="myControl as ctrl">{{ ctrl.content | json }}</div>


Answer 3:

请不要在参数的成功传递函数内容。 这是一个全局变量。 传递将创建范围的问题。 还可以使用内外成功的功能和外面CONSOLE.LOG。



文章来源: Angular Share Variable betwen $http.get and controller [duplicate]