ng-csv包含来自api调用的数据

时间:2015-09-10 19:54:31

标签: angularjs

我需要从api调用中为ng-csv分配数据。 我试过这个。但没有工作

script:
$scope.getArray = function () {

    var temp;
    $http.get(Config.serviceUrlBase + '/abc/ExportToCSV').success(function(data, status, headers, config) {
       temp = data;
    })
   return temp;
};
 //here data is string separated by comma and new line for csv format.

aspx file:
<Button ID="ExportToCSV" ng-csv="getArray" filename="test.csv" lazy-load="true"
>ExportToCSV</Button>

我错过了什么吗?

5 个答案:

答案 0 :(得分:8)

temp变量被异步分配,这意味着return temp;实际返回undefined

ng-csv属性接受承诺,因此您应使用$q

$scope.getArray = function () {
    var deferred = $q.defer();

    $http
        .get(Config.serviceUrlBase + '/abc/ExportToCSV')
        .success(function(data, status, headers, config) {
           deferred.resolve(data);
        });

    return deferred.promise;
};

注意:$q是一种服务,您可以在控制器中注入,也可以注入任何东西。

答案 1 :(得分:5)

你错过'()'。

ng-csv =“ getArray()

答案 2 :(得分:5)

我遇到同样的问题,并通过以下方式解决:

$scope.getArray = function () {

   var temp = $http.get(Config.serviceUrlBase + '/abc/ExportToCSV').success(function(data, status, headers, config) {
      return data;
   })
   return temp;
};

问题是因为临时变量默认为undefined。所以,你应该等到变量从promise返回值。

答案 3 :(得分:2)

要解决此问题,您需要在延迟加载时使用promise,但是由于数据是JSON格式,因此还必须将已解析的响应包含在数组中。

当我们返回一个集合时,以JSON格式保留响应导致0仅在第一列下加载。

在下面的AngularJS示例中,我们有一个我们想要存储在数组中的集合(即数据行):

$scope.getArray = function() {
    var deferme = $q.defer();

    $http.get(url).success(function(data) {
        var myArr = [];

        for(var i=0; i < data.length; i++) {
            myArr.push([data[i].value1, data[i].value2, etc...]);
        }

        deferme.resolve(myArr);     
    });

    return deferme.promise;
}

答案 4 :(得分:0)

ng-csv指令的值应该是表达式,值或promise。

因此您可以指定$scope.getArray

myapp.controller('myctrl', function ($scope) {
    $http.get(url)
            .success(function (data) {
                $scope.getArray = data;
            });
});

AngularJS正在关注范围变量的更新。