angular ng-repeat with 指令
angular ng-repeat with directive
我是 angular 的新手,遇到以下问题需要帮助。
我正在使用 angular 图表指令 http://jtblin.github.io/angular-chart.js/ 来构建图表板。我得到了以下场景:
我有一个视图指令,并在此处输入代码关联控制器。
在控制器内部应该有一个数组 charts[] 来保存对象。
这些对象应该与图表指令双向绑定。
这样做的合适方法是什么?我将在没有任何控制器连接到每个图表的情况下动态地绘制我的图表。这可能吗?
reportView.html
<div ng-repeat="c in charts">
<chart></chart>
<div>
reportViewController.js
angular.module('app').controller('reportViewController', reportViewCtrl);
reportViewCtrl.$inject = ['$scope', '$log', 'RefinerService', 'appConfig'];
function reportViewCtrl($scope, $log, RefinerService, appConfig) {
$scope.charts = [];
var chart = {
ID: 1
, Visible: true
, Type: "chart-line"
, Data: [
[65, 59, 80, 81, 56, 55, 40]
, [28, 48, 40, 19, 86, 27, 90]
]
, Labels: ['2006', '2007', '2008', '2009', '2010', '2011', '2012']
, Series: ['Product A', 'Product B']
}
$scope.charts.push(chart);
}
chartTemplate.html
<div class="chart-container" flex>
<canvas class="chart {{c.Type}}"
data="{{c.Data}}"
labels="{{c.Labels}}"
series="{{c.Series}}">
</canvas>
</div>
directive.js
angular.module('app').directive('chart', function () {
return {
restrict: 'E',
templateUrl: 'templates/chartTemplate.html',
scope: {
id: '@id',
type: '@type'
}
};
});
帮助将不胜感激!干杯菲利普
编辑:最终 fiddle 显示工作示例,与 OP 合作 - https://plnkr.co/edit/8fJ4u0U2fL4lYTioCbG0?p=preview
您需要将 "c" 从 ng-repeat 传递到图表指令中。
这里有一个fiddle来演示:http://jsfiddle.net/8zwmt18L/1/
<div ng-repeat="c in charts">
<chart chart-data="c"></chart>
<div>
在你的指令中:
angular.module('app').directive('chart', function () {
return {
restrict: 'E',
templateUrl: 'templates/chartTemplate.html',
scope: {
chartData: '='
}
};
});
在您的指令模板中:
<div class="chart-container" flex>
<canvas class="chart chart-base"
chart-type="chartData.Type"
data="chartData.Data"
labels="chartData.Labels"
series="chartData.Series">
</canvas>
</div>
在图表的数据中,您的类型需要是 "Line" 或 "Bar",而不是 "chart-line" 或 "chart-bar"
我是 angular 的新手,遇到以下问题需要帮助。 我正在使用 angular 图表指令 http://jtblin.github.io/angular-chart.js/ 来构建图表板。我得到了以下场景:
我有一个视图指令,并在此处输入代码关联控制器。 在控制器内部应该有一个数组 charts[] 来保存对象。 这些对象应该与图表指令双向绑定。 这样做的合适方法是什么?我将在没有任何控制器连接到每个图表的情况下动态地绘制我的图表。这可能吗?
reportView.html
<div ng-repeat="c in charts">
<chart></chart>
<div>
reportViewController.js
angular.module('app').controller('reportViewController', reportViewCtrl);
reportViewCtrl.$inject = ['$scope', '$log', 'RefinerService', 'appConfig'];
function reportViewCtrl($scope, $log, RefinerService, appConfig) {
$scope.charts = [];
var chart = {
ID: 1
, Visible: true
, Type: "chart-line"
, Data: [
[65, 59, 80, 81, 56, 55, 40]
, [28, 48, 40, 19, 86, 27, 90]
]
, Labels: ['2006', '2007', '2008', '2009', '2010', '2011', '2012']
, Series: ['Product A', 'Product B']
}
$scope.charts.push(chart);
}
chartTemplate.html
<div class="chart-container" flex>
<canvas class="chart {{c.Type}}"
data="{{c.Data}}"
labels="{{c.Labels}}"
series="{{c.Series}}">
</canvas>
</div>
directive.js
angular.module('app').directive('chart', function () {
return {
restrict: 'E',
templateUrl: 'templates/chartTemplate.html',
scope: {
id: '@id',
type: '@type'
}
};
});
帮助将不胜感激!干杯菲利普
编辑:最终 fiddle 显示工作示例,与 OP 合作 - https://plnkr.co/edit/8fJ4u0U2fL4lYTioCbG0?p=preview
您需要将 "c" 从 ng-repeat 传递到图表指令中。
这里有一个fiddle来演示:http://jsfiddle.net/8zwmt18L/1/
<div ng-repeat="c in charts">
<chart chart-data="c"></chart>
<div>
在你的指令中:
angular.module('app').directive('chart', function () {
return {
restrict: 'E',
templateUrl: 'templates/chartTemplate.html',
scope: {
chartData: '='
}
};
});
在您的指令模板中:
<div class="chart-container" flex>
<canvas class="chart chart-base"
chart-type="chartData.Type"
data="chartData.Data"
labels="chartData.Labels"
series="chartData.Series">
</canvas>
</div>
在图表的数据中,您的类型需要是 "Line" 或 "Bar",而不是 "chart-line" 或 "chart-bar"