2016-07-07 1 views
1

У меня есть угловой код, как -JSON данные с AngularJS d3

$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

Я подозреваю, что treemap отображает до получения данных $scope.data. Спасибо

+0

В коде $ scope.componentsData становится установлен до $ HTTP обещание, если выполнены. Вам нужно переместить настройку $ scope.componentsData в успешный обратный вызов обещания – jbrown

ответ

1

В вашем коде $ scope.componentsData устанавливается перед обещанием $ http, если выполнено. Вы должны переместить установку $ scope.componentsData в успех обратного вызова обетования, как это:

$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) {}); 
+0

Он не работает даже после установки его в функции успеха. Я разместил ссылку на treemap, который я использую. – ThatBird

+0

@ThatBird - Хорошо, я не могу загрузить этот компонент treemap, чтобы проверить его, поэтому вы можете добавить этот элемент:

{{ componentsData | json }}
в свой html и сказать мне, если он отображает данные, которые вы ожидаете? – jbrown

+0

Данные Json прекрасны, как если бы я скопировал его в '' children ''из компонентовData, treemap отображает только штраф – ThatBird

0

Вам нужно обновить $ 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 
 
    // };

+0

Он не работает даже после установки его в функции успеха. Я разместил ссылку на treemap, который я использую. – ThatBird

 Смежные вопросы

  • Нет связанных вопросов^_^