在angularjs 1.5.8中使用Chartjs的饼图,组件未显示在视图中
我想使用Chart.js在现有angular应用程序上创建一个类似仪表板的功能。因此,我为仪表板创建了一个视图在angularjs 1.5.8中使用Chartjs的饼图,组件未显示在视图中,angularjs,chart.js,angular-components,Angularjs,Chart.js,Angular Components,我想使用Chart.js在现有angular应用程序上创建一个类似仪表板的功能。因此,我为仪表板创建了一个视图 <md-content layout-padding layout-fill flex class="animated fadeIn"> <div layout-padding> <md-card-title> <md-card-title-text> <
<md-content layout-padding layout-fill flex class="animated fadeIn">
<div layout-padding>
<md-card-title>
<md-card-title-text>
<span class="md-headline">Dashboard</span>
</md-card-title-text>
</md-card-title>
</div>
<md-divider></md-divider>
<div>
<md-grid-list md-cols-gt-md="12" md-cols-sm="3" md-cols-md="8"
md-row-height-gt-md="1:1" md-row-height="4:3"
md-gutter-gt-md="8px" md-gutter-gt-sm="4px" md-gutter="2px">
<md-grid-tile md-colspan-gt-sm="3" md-rowspan-gt-sm="3">
<pie-chart header="'Auths'" auth-counts="ctrl.authCounts" flex-gt-sm></pie-chart>
</md-grid-tile>
</md-grid-list>
</div>
</md-content>
然后,组件饼图如下所示
(function () {
'use strict';
angular.module('chart')
.component('pieChart', {
controller: PieChartComponentController,
templateUrl: 'Scripts/src/views/dashboard/pie.chart.template.html',
bindings: {
header: '<',
authCounts: '<'
}
});
PieChartComponentController.$inject = ['$timeout'];
function PieChartComponentController($timeout) {
var $ctrl = this;
$ctrl.$onInit = function () {
var myPieChart;
var data;
}
$ctrl.isArrayEmpty = function (authCount) {
if (!authCount) return true;
return authCount.length === 0;
}
$ctrl.createChart = function () {
var pieData = {
labels: ["Purple","Green","Orange","Yellow"],
datasets: [
{
data: [20, 40, 10, 30],
backgroundColor: ["#878BB6","#4ACAB4","#FF8153","#FFEA88"]
}
]
};
var ctx = document.getElementById("myPieChart").getContext("2d");
var myPieChart = new Chart(ctx, {
type: 'pie',
data: pieData
});
} // end createChart()
}
})();
看起来一切正常,但画布的高度和宽度为0,图表未呈现
但是,如果我删除饼图
组件,将
元素放在仪表板模板的外部,并将数据放在仪表板中,则会呈现图表。但那不是我想做的。我需要有每种类型的组件。那么,我做错了什么导致了这种行为
我还尝试了显示相同行为的angularchart.js
。如果我将
元素放在仪表板模板中,它会显示图表,但不会从饼图元素内部显示。我需要帮助排除故障。我肯定错过了一些东西,但我不知道是什么。画布是在提供数据之前呈现的,还是有什么事情我忽略了(或忘记了)?是不是$onInit()angular 2.x语法?您的问题是您正在使用1.5.x。是否仪表板控制器
控制器别名为ctrl
?是。我一定是错过了添加路由器。我会更新的question@Ericson578,$onInit也在1.5.x中。在创建画布之前,我必须放置ng if=“$ctrl.authCounts”
。我一补充这一点,它就奏效了。
(function () {
'use strict';
angular.module('chart')
.component('pieChart', {
controller: PieChartComponentController,
templateUrl: 'Scripts/src/views/dashboard/pie.chart.template.html',
bindings: {
header: '<',
authCounts: '<'
}
});
PieChartComponentController.$inject = ['$timeout'];
function PieChartComponentController($timeout) {
var $ctrl = this;
$ctrl.$onInit = function () {
var myPieChart;
var data;
}
$ctrl.isArrayEmpty = function (authCount) {
if (!authCount) return true;
return authCount.length === 0;
}
$ctrl.createChart = function () {
var pieData = {
labels: ["Purple","Green","Orange","Yellow"],
datasets: [
{
data: [20, 40, 10, 30],
backgroundColor: ["#878BB6","#4ACAB4","#FF8153","#FFEA88"]
}
]
};
var ctx = document.getElementById("myPieChart").getContext("2d");
var myPieChart = new Chart(ctx, {
type: 'pie',
data: pieData
});
} // end createChart()
}
})();
<div layout-align="start center" ng-if="$ctrl.isArrayEmpty($ctrl.authCounts)">
Not enough information available to create the chart.
</div>
<canvas id="myPieChart" width="250" height="250" ng-init="$ctrl.createChart()" ng-if="$ctrl.isArrayEmpty($ctrl.authCounts)" flex-gt-sm></canvas>
</md-card-content>