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

AngularJS选项卡中的Chart.js无法呈现

莘聪
2023-03-14
问题内容

我正在使用基于Chart.js的AngularJS模块来显示图形。它的工作原理像一个超级按钮,但是当我在AngularJS选项卡集中显示图表时,如果它不是第一个选项卡,则该图形不会呈现。

  <tabset>
    <tab heading="Tab 1">
        <!-- OK -->
        <canvas class="chart chart-pie" data="[140, 160]" labels="['d1', 'd2']" legend="true"></canvas>
    </tab>
    <tab heading="Tab 2">
        <!-- Does not render -->
       <canvas class="chart chart-pie" data="[140, 160]" labels="['d1', 'd2']" legend="true"></canvas>
    </tab>
  </tabset>

这是JSFiddle。有人设法解决这个问题吗?

谢谢


问题答案:

正如@Martin指出的,这是Chart.js的问题,当在隐藏的DOM元素中初始化时,图表未显示(即使显示隐藏的元素,其高度和宽度也保持为0px)。

这一问题已被跟踪在这里。

如果您被诸如隐藏的选项卡之类的组件所阻塞,我将与您分享我的自制解决方案。我创建了一个指令,在其中编译canvas元素。为了能够在需要时刷新元素(例如,打开选项卡时),我观察了一个属性,该属性将在控制器中的选项卡更改时手动更改。

这是我的指令:

app.directive('graphCanvasRefresh', ['$compile', function($compile) {
function link(scope, elem, attrs) {

    function refreshDOM() {
        var markup = '<canvas class="chart chart-pie" id="graph" data="entityGraph.data" labels="entityGraph.labels" legend="true" colours="graphColours" ></canvas>';
        var el = angular.element(markup);
        compiled = $compile(el);
        elem.html('');
        elem.append(el);
        compiled(scope);
    };

    // Refresh the DOM when the attribute value is changed
    scope.$watch(attrs.graphCanvasRefresh, function(value) {
        refreshDOM();
    });

    // Clean the DOM on destroy
    scope.$on('$destroy', function() {
        elem.html('');
    });
};

return  {
    link: link
};
}]);

脏透了,但这是一个可以解决Chart.js更新的有效解决方案。希望它可以帮助某人。



 类似资料:
  • 如何呈现以下选项列表的值? 预期结果(预期值="limit.value": 结果:

  • 我正在尝试使用Chart.js在一个页面上创建多个图表。我正在动态创建几个画布来承载这些图表。 每个图表的相关信息都包含在JSON对象中,JSON对象包含在“allDatas”中。 请注意,allDatas中的数据格式正确,并且每个数据都经过测试,我们可以正确创建图表,而不会出现任何问题。画布也是一样,它们都是正确的,我们可以在其中任何一个中显示图表。当我尝试创建多个图表时,会出现问题。 以下是我

  • 问题内容: 我将现有的angular应用程序升级到angular(v1.2.13),ui-router(v0.2.8)和ui- bootstrap(v0.10.0)的所有最新版本。 我有具有多个命名视图的嵌套视图。其中一个命名视图内部具有选项卡。我以前可以在每个标签中进行设置,但现在不再起作用。如果我不使用选项卡,则命名视图将正确呈现。 我创建了一个plunkr以显示我所看到的。 这是我的状态配置

  • 问题内容: 我想在我的项目中使用AngularJS UI Bootstrap Tabs,但是我需要它来支持路由。 例如: 据我从源代码可以看出,current 和指令不支持路由。 添加路由的最佳方法是什么? 问题答案: 要添加路由,通常使用ng- view指令。我不确定修改角度UI以支持您要查找的内容是否足够容易,但这是一个大致显示我认为您要查找的内容(这不一定是最好的方式- 希望有人可以提供为您

  • 角度UI,仅支持基本选项卡。我想创建一个支持嵌套选项卡的指令 我认为最好的语法是 这种方法的问题是,我需要2个ng transclude——一个用于窗格,一个用于标题。 由于执行第一个ng transclude非常容易(就像在教程中一样): 我不知道我怎么能在这里排除标题?如何保留选项卡的嵌套结构? 也许有更好的办法解决这个问题?

  • 本文向大家介绍js选项卡的实现方法,包括了js选项卡的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js选项卡的实现方法。分享给大家供大家参考。具体分析如下: 一、思路 1. 获取元素; 2. for循环按钮元素添加onclick(点击) 或者 onmousemove(移入)事件; 3. 点击当前按钮时会以高亮状态显示,通过for循环历遍把所有的按钮样式设置为空在把所有div的d