【问题标题】:How to use d3.js with angular.js application?如何将 d3.js 与 angular.js 应用程序一起使用?
【发布时间】:2016-03-16 13:11:22
【问题描述】:

我编写了一个服务,它以 json 格式从 mongodb 返回数据。我正在尝试在树视图中显示数据。我正在使用http://bl.ocks.org/d3noob/8326869 此处给出的示例之一。当我检查网页时,我得到一个没有结构的空 div,Web 控制台也没有任何错误。

$http.get('/getActors/' + $scope.productName).success(function(data){


        $scope.data = data;
        $scope.actors = [];


        var treeData = $scope.data;
        console.log(treeData)

        var margin = {top: 40, right: 120, bottom: 20, left: 120},
            width = 960 - margin.right - margin.left,
            height = 500 - margin.top - margin.bottom;

        var i = 0;

        var tree = d3.layout.tree()
            .size([height, width]);

        var diagonal = d3.svg.diagonal()
            .projection(function(d) { return [d.x, d.y]; });


        var svg = d3.select("#chart").append("svg")
            .attr("width", width + margin.right + margin.left)
            .attr("height", height + margin.top + margin.bottom)
            .append("g")
            .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

        root = treeData[0];

        update(root);

        function update(source) {

            // Compute the new tree layout.
            var nodes = tree.nodes(root).reverse(),
                links = tree.links(nodes);

            // Normalize for fixed-depth.
            nodes.forEach(function(d) { d.y = d.depth * 100; });

            // Declare the nodes…
            var node = svg.selectAll("g.node")
                .data(nodes, function(d) { return d.id || (d.id = ++i); });

            // Enter the nodes.
            var nodeEnter = node.enter().append("g")
                .attr("class", "node")
                .attr("transform", function(d) {
                    return "translate(" + d.x + "," + d.y + ")"; });

            nodeEnter.append("circle")
                .attr("r", 10)
                .style("fill", "#fff");

            nodeEnter.append("text")
                .attr("y", function(d) {
                    return d.children || d._children ? -18 : 18; })
                .attr("dy", ".35em")
                .attr("text-anchor", "middle")
                .text(function(d) { return d.name; })
                .style("fill-opacity", 1);

            // Declare the links…
            var link = svg.selectAll("path.link")
                .data(links, function(d) { return d.target.id; });

            // Enter the links.
            link.enter().insert("path", "g")
                .attr("class", "link")
                .attr("d", diagonal);

        }

        /*for (var actor in data){
            /!*$scope.actors.push(data[actor].actor);*!/
        }
        console.log("Printing actors new impl");

        items = data[actor].actor;
        for (var item in items){

            $scope.actors.push(items[item]);
        }*/
    }).error(function(data){
        console.log('Error: ' + data)
    });

数据是分层格式的有效 json

[
  {
    "_id": "56e2f2efe1379a2ea1fe2cd6",
    "productName": "Kernal",
    "feature": [],
    "activity": [],
    "actor": [
      "One",
      "Two",
      "Three"

    ]
  }
]

html代码如下:

 <div id="chart">

   </div>

【问题讨论】:

  • 不完全是 d3,但此解决方案似乎与您的用例相关:imdb.zoomcharts.com
  • html 代码中 id 中的“#”对您来说可能是个问题。
  • @profesor79:我刚刚意识到这就是问题所在。而这一切都在我想知道我做错了什么的时候。谢谢。现在我可以看到错误,它表明数据是错误的。但是当我在 JSON lint 中复制它时,它显示为有效。

标签: javascript angularjs json d3.js


【解决方案1】:

请从 html 代码中删除 #

<div id="chart">

   </div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2021-11-08
    • 2015-06-19
    相关资源
    最近更新 更多