【问题标题】:JSON data with AngularJS d3AngularJS d3 的 JSON 数据
【发布时间】:2016-07-07 17:00:16
【问题描述】:

我有像 -

这样的角码
$scope.data =[];
$http({
          method: "GET",
          url: "http://127.0.0.1:8000/api/",
        }).then(function success(response){
          var total = response.data.length;
          for(var i=0; i<response.data.length; i++){
            $scope.companies.push(response.data[i].companies);
            $scope.wtdcagr.push(response.data[i].wtdcagr);
          }
          for(var i=0; i<$scope.wtdcagr.length; i++){
            $scope.final_wtdcagr.push($scope.wtdcagr[i]+10);
            $scope.sum += $scope.final_wtdcagr[i];
          }
          $scope.max_val=$scope.sum/total;
          for(var i=0; i<$scope.final_wtdcagr.length; i++){
            $scope.data.push({"name":$scope.companies[i], "children":[{"name":$scope.companies[i], "size":$scope.final_wtdcagr[i]}]});
          }
          $scope.load=1;
        },function error(response){
      });
    $scope.componentsData ={"name":"root","children":[{"name":"Koutons Retail India","children":[{"name":"Koutons Retail India","size":10}]},{"name":"Liberty Shoes","children":[{"name":"Liberty Shoes","size":7.975043433750518}]},{"name":"Bharat Petroleum Corporation","children":[{"name":"Bharat Petroleum Corporation","size":22.985710309643373}]},{"name":"Chennai Petroleum Corporation","children":[{"name":"Chennai Petroleum Corporation","size":13.214542375972897}]},{"name":"Gujarat State Fertilizers & Chemicals","children":[{"name":"Gujarat State Fertilizers & Chemicals","size":9.054818244756332}]},{"name":"Hindustan Organic Chemicals","children":[{"name":"Hindustan Organic Chemicals","size":10.54768008048322}]},{"name":"Tata Coffee","children":[{"name":"Tata Coffee","size":9.905904053799995}]},{"name":"Coffee Day Enterprises","children":[{"name":"Coffee Day Enterprises","size":9.132573506417222}]},{"name":"Corporation Bank","children":[{"name":"Corporation Bank","size":9.413101403401246}]},{"name":"Dena Bank","children":[{"name":"Dena Bank","size":2.9519383428833708}]}]} ;
    // $scope.componentsData = {
    //     "name": "root",
    //     "children": $scope.data
    //   };

在我的html中-

<div id="treeParentDiv" style="width:1200px;height:600px;margin:auto" >
<treemap
        data="componentsData"
        parentElementId="treeParentDiv"
            color-label="size"
        size-label="size"
            max-val="10"
        search="{{searchbox}}"
            id="IDTreeMap">
</treemap>

$scope.componentsData 是静态的时它可以工作,但是当我尝试从 json 加载它并将它传递给$scope.componentsData 时-

$scope.componentsData = {
     "name": "root",
     "children": $scope.data
   };

它无法正常工作。 我使用的树形图是https://github.com/poshak/treemap

我怀疑树形图在$scope.data 接收到数据之前呈现。谢谢

【问题讨论】:

  • 在您的代码中 $scope.componentsData 将在 $http 承诺之前设置(如果已实现)。您需要将 $scope.componentsData 的设置移动到 promise 的成功回调中

标签: javascript angularjs json d3.js http-get


【解决方案1】:

在您的代码中,$scope.componentsData 将在 $http 承诺之前设置(如果已实现)。您需要将 $scope.componentsData 的设置移动到 promise 的成功回调中,如下所示:

  $http({
    method: "GET",
    url: "http://127.0.0.1:8000/api/",
  }).then(function success(response) {
    var total = response.data.length;
    for (var i = 0; i < response.data.length; i++) {
      $scope.companies.push(response.data[i].companies);
      $scope.wtdcagr.push(response.data[i].wtdcagr);
    }
    for (var j = 0; j < $scope.wtdcagr.length; j++) {
      $scope.final_wtdcagr.push($scope.wtdcagr[j] + 10);
      $scope.sum += $scope.final_wtdcagr[j];
    }
    $scope.max_val = $scope.sum / total;
    for (var k = 0; k < $scope.final_wtdcagr.length; k++) {
      $scope.data.push({
        "name": $scope.companies[k],
        "children": [{
          "name": $scope.companies[k],
          "size": $scope.final_wtdcagr[k]
        }]
      });
    }
    $scope.load = 1;
    $scope.componentsData = {
      "name": "root",
      "children": $scope.data
    };
  }, function error(response) {});

【讨论】:

  • 在成功函数中设置后也不起作用。我已经发布了一个指向我正在使用的树形图的链接。
  • @ThatBird - 好的,我无法加载树图组件来测试它,所以你可以添加这个元素:
    {{ componentsData | json }}
    到您的 html 并告诉我它是否呈现您期望的数据?
  • Json 数据很好,因为当我将其复制粘贴到 componentsData 的 "children" 时,树形图渲染得很好
  • @ThatBird - 好的,你有没有逐步检查你的 $http 调用,看看它是否在预期的时候被执行并返回预期的结果?因为根据代码,您显示 $scope.componentsData 的分配肯定需要在成功回调中才能在适当的摘要周期中被识别。
  • 所以我尝试记录两件事,一件在成功回调中,另一件在它之外,在外面的东西首先记录到控制台。
【解决方案2】:

您需要在 then 函数中更新 $scope.componentsData。

$scope.data =[];
$http({
          method: "GET",
          url: "http://127.0.0.1:8000/api/",
        }).then(function success(response){
          var total = response.data.length;
          for(var i=0; i<response.data.length; i++){
            $scope.companies.push(response.data[i].companies);
            $scope.wtdcagr.push(response.data[i].wtdcagr);
          }
          for(var i=0; i<$scope.wtdcagr.length; i++){
            $scope.final_wtdcagr.push($scope.wtdcagr[i]+10);
            $scope.sum += $scope.final_wtdcagr[i];
          }
          $scope.max_val=$scope.sum/total;
          for(var i=0; i<$scope.final_wtdcagr.length; i++){
            $scope.data.push({"name":$scope.companies[i], "children":[{"name":$scope.companies[i], "size":$scope.final_wtdcagr[i]}]});
          }
          $scope.load=1;
         $scope.componentsData = {
         "name": "root",
         "children": $scope.data
       };
        },function error(response){
      });

    // $scope.componentsData = {
    //     "name": "root",
    //     "children": $scope.data
    //   };

【讨论】:

  • 在成功函数中设置后也不起作用。我已经发布了一个指向我正在使用的树形图的链接。
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 2015-01-24
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多