gpt4 book ai didi

angularjs - Angular-ui + D3 : how to implement contextual menu (popover vs modal)?

转载 作者:行者123 更新时间:2023-12-04 17:35:44 26 4
gpt4 key购买 nike

给定以下用例:

我使用 D3js 来渲染由 AngularJS 管理的对象。我想为 D3 图表添加交互性。单击 svg 元素时,我希望有一种允许修改对象属性的弹出菜单。 AngularJS 需要这些属性,但 D3 不呈现这些属性。

D3-Angular 集成源自 http://bl.ocks.org/biovisualize/5372077它使用闭包。

当前实现:

截至今天,我正在使用 angular-ui bootstrap 中的 $modal 服务来创建弹出菜单。从功能的 Angular 来看,它工作得很好:
当点击一个 svg 元素时,D3 调度一个事件
该事件被调用 $modal 服务的 Angular 捕获
在模态窗口中,我修改对象属性

但是我对渲染不满意。我希望弹出菜单看起来像一个弹出框。它应该靠近被点击的 svg 元素。

据我了解,我有两个选项 :

  • 继续使用 $modal 服务并修改它的外观。应该采取什么方法?使用 windowClass 选项?
  • 停止使用 $modal 服务并开始破解 popover 指令。问题是我认为不可能
    将这样的指令添加到 svg 元素。解决方案是
    在 $modal 服务附近创建一个弹出服务。

  • 应该选择哪个选项?以及如何实现?

    编辑:

    使用自定义 my-popover 指令工作的 plunker:
    http://plnkr.co/edit/5KYvxi?p=preview

    最佳答案

    可以在 d3 生成的代码中添加指令,您唯一需要确保的是您调用 $compile 内容呈现后对其进行服务。

    对于给定的示例,它看起来像这样:

        .directive('barChart', function($compile){  // inject $compile
    var chart = d3.custom.barChart();
    return {
    restrict: 'E',
    replace: true,
    template: '<div class="chart"></div>',
    scope:{
    height: '=height',
    data: '=data',
    hovered: '&hovered'
    },
    link: function(scope, element, attrs) {
    var chartEl = d3.select(element[0]);
    chart.on('customHover', function(d, i){
    scope.hovered({args:d});
    });

    scope.$watch('data', function (newVal, oldVal) {
    chartEl.datum(newVal).call(chart);
    $compile(element.contents())(scope); // <-- call to $compile
    });

    scope.$watch('height', function(d, i){
    chartEl.call(chart.height(scope.height));
    $compile(element.contents())(scope); // <-- call to $compile
    })
    }
    }

    d3的绘图功能:

           bars.enter().append('rect')
    .classed('bar', true)
    .attr('myPopover', 'Text to show') // <-- Adding an attribute here.
    .attr({x: chartW,
    width: barW,
    y: function(d, i) { return y1(d); },
    height: function(d, i) { return chartH - y1(d); }
    })
    .on('mouseover', dispatch.customHover);

    Demo

    关于angularjs - Angular-ui + D3 : how to implement contextual menu (popover vs modal)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19656365/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com