当前位置: 首页 > 面试题库 >

Angular-UI + D3:如何实现上下文菜单(弹出菜单与模式菜单)?

井兴怀
2023-03-14
问题内容

给定以下用例:

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

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

当前实施:

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

但是我对渲染不满意。我希望弹出菜单看起来像一个弹出框。应将其放置在靠近单击的svg元素附近。

据我了解,我有 两种选择

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

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

编辑:

使用自定义的my-popover指令工作的监听器: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



 类似资料:
  • 弹出菜单是可触发的、上下文叠加显示链接列表和别的内容。它们可以与Bootstrap内置的弹出菜单JavaScript插件交互。它通过点击触发,而不是通过鼠标悬停悬浮。这是一个故意设计决策。 示例 把弹出菜单的触发器以及弹出菜单包裹在一个.dropdown中,或者其它声明了position:relative;的元素中。然后,添加菜单的HTML。 <div class="dropdown open">

  • mui框架内置了弹出菜单插件,弹出菜单显示内容不限,但必须包裹在一个含.mui-popover类的div中,如下即为一个弹出菜单内容: <div id="popover" class="mui-popover"> <ul class="mui-table-view"> <li class="mui-table-view-cell"><a href="#">Item1</a></li

  • 本文向大家介绍Android PopupMenu弹出菜单的实现,包括了Android PopupMenu弹出菜单的实现的使用技巧和注意事项,需要的朋友参考一下 Android PopupMenu弹出菜单的实现 (1)布局文件:用于弹出菜单的处罚button: (2)res-menu目录下的main.xml文件: (3)类的文件: 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢

  • 本文向大家介绍iOS10 widget实现3Dtouch 弹出菜单,包括了iOS10 widget实现3Dtouch 弹出菜单的使用技巧和注意事项,需要的朋友参考一下 文章将依次从以下几个问题着手,进行详细说明: 1、如何为现有的工程添加widget; 2、如何绘制UI; 3、如何调起app; 4、如何与host app共享数据。 图2 添加today的target 图3 添加today之后的工程

  • 本文向大家介绍简单实现Android弹出菜单效果,包括了简单实现Android弹出菜单效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android弹出菜单效果的具体代码,供大家参考,具体内容如下 功能描述:用户单击按钮弹出菜单。当用户选择一个菜单项,会触发MenuItemClick事件并让弹出的菜单消失;如果用户在菜单外单击,则直接消失弹出的菜单。当菜单消失时,会引发Dismi

  • 使用任何按钮都可以触发一个弹出菜单,只需要把它放置在一个.btn-group中,并提供适当的弹出菜单标记。 插件依赖 按钮弹出菜单需要你的Bootstrap中调用了弹出菜单插件。 内容 单按钮弹出菜单 通过一些基本的标记变化,将一个按钮变成一个弹出菜单。 <!-- Single button --> <div class="btn-group"> <button type="button"