我有一个div需要托管图表或表格,具体取决于XHR响应 . 在图表的情况下,我需要将div内容替换为chart.js用于显示图形的canvas元素 .
如果我将canvas元素添加到HTML代码中,angular-chart.js会呈现图形 . 但是,如果我使用javascript将画布注入div,则canvas元素将位于dom中,但不会显示图表 .
我该如何解决这个问题?
HTML
<div ng-controller="ChartCtrl">
<div>
{{chart.name}}
This works (doughnut):
<canvas id="chart-{{$index}}" class="chart chart-doughnut" chart-data="chart.data" chart-labels="chart.labels"></canvas>
</div>
This Doesn't work ({{chart.type}}):
<div id="chartDiv"> </div>
</div>
Javascript
var myApp = angular.module('myApp', ['chart.js']);
// Create the controller, the 'ToddlerCtrl' parameter
// must match an ng-controller directive
myApp.controller('ChartCtrl', function ($scope) {
var chart_div = $('#chartDiv');
chart_div.empty();
canvas_html = '<canvas id="chart-2" class="chart chart-doughnut" chart-data="chart.data" chart-labels="chart.labels"></canvas>';
console.log(canvas_html)
chart_div.append(canvas_html);
//console.log(chart_div)
$scope.chart = {
name: 'Chart 1',
type: 'Doughnut',
labels: ['EVSC', 'ISB'],
data: [13, 44]
};
});
Plunker示例:http://plnkr.co/edit/9JkANojIl8EXRj3hJNVH?p=preview
2 回答
你正在改变DOM的结构,你不能以“vanilla”或“jQuery”方式附加你新创建的元素 .
您需要将HTML字符串或DOM元素compile放入模板中,以生成将链接到
scope
的模板函数 . 该过程将遍历DOM树并将DOM元素与directives匹配 .你可以在this Plunker example查看结果 .
@ HiDeo的答案是现货,但这是一个简化的指令来做同样的事情(注意
$compile
仍然) . 附加到scope
的chartData
变量是Chartjs图表的预设,任何都可以工作 - 唯一需要注意的是我已经添加到update
属性的$watch
:如果你要更新你的图表我会建议做某事这样只是为了保持双手清洁 .