2016-11-27 6 views
0

私のアプリケーションコントローラで私は私のAPIにリクエストを行います。それは次のようになります。anglejsからd3にjsonを渡すにはどうすればいいですか?

.state('state1', { 
     url: '/datas/:id', 
     templateUrl: 'myurl.com', 
     title: 'title', 
      controller: function($http, $rootScope, $location, $stateParams){ 
       var id = $stateParams.id;    
     $http.post('http://' + $location.host() + id, {id: id } , {}) 
     .then(function(d){ 

      $rootScope.data = d.data; 
     }, 
     function(err){ 
      console.log(err); 
     }); 
     }, 
    }) 

私D3スクリプトは次のようなものです:

<script> 
 
    ... 
 
    var force = d3.layout.force().size([width, height]).on("tick", tick); 
 

 
    var svg = d3.select("#d3g").append("svg").attr("width", width).attr("height", height); 
 
    var link = svg.selectAll(".link"), 
 
     node = svg.selectAll(".node"); 
 
    ... 
 
    ... 
 
    d3.json("data.json", function(error, json) { 
 
       if (error){ 
 
       console.log(error); 
 
       } 
 
    ... 
 
    ... 
 
</script>

は、どのように私はD3に私は(controllerに)APIからの受信データを渡すことができます表示(inとhtmlファイル)。

+0

をコントローラでAjaxをすでに実行しているので、d3.jsonを実行する必要はありません。そのため、d3.json成功ブロック内のコードをpromiseの関数に移動する必要があります。 – Cyril

+0

@Cyrilありがとう私はデータにアクセスできますか? – dmx

答えて

1

より「角度の方法は、」サービスでloadindデータであり、のようなあなたのD3コンポーネントをレンダリングするディレクティブを作成:使用法に

.service('dataLoader', function($http, $location, $stateParams){ 
    return { 
     get: function() { 
      var id = $stateParams.id;    
      return $http 
       .post('http://' + $location.host() + id, {id: id } , {}) 
       .then(function(d){ 
        return d.data; 
       }) 
       .catch(function(err){ 
        return err; 
       }); 
      } 
    } 
}) 

.directive('mapElement', function(){ 
    return { 
    restrict: 'E' 
    scope: {}, 
    controller: function(dataLoader) { 
     ... 
     var force = d3.layout.force().size([width, height]).on("tick", tick); 

     var svg = d3.select("#d3g").append("svg").attr("width", width).attr("height", height); 
     var link = svg.selectAll(".link"), 
      node = svg.selectAll(".node"); 
     ... 
     ... 
     dataLoader 
     .get() 
     .then(function(data){ 
      d3.json(data, function(error, json) { 
        if (error){ 
        console.log(error); 
        } 
       ... 
       ... 
      } 
     }) 
    } 
}); 

ちょうどあなたのhtmlに入れるこのディレクティブ、:

<map-element></map-element> 
関連する問題