$ http.get和controller之间的Angular Share变量

时间:2015-01-29 10:04:23

标签: javascript angularjs angularjs-directive angularjs-scope

我无法将$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); 
});

3 个答案:

答案 0 :(得分:2)

这里有两个问题:

  • 成功处理程序中的content参数是 shadowing 控制器中的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";
    });
});

答案 1 :(得分:1)

首先,您不要等待异步$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>

答案 2 :(得分:0)

请勿在参数中传递内容以获取成功功能。这是一个全局变量。通过它会产生范围问题。 也可以在成功函数内部和外部使用console.log。