【问题标题】:angular ng-repeat with directive带指令的角度 ng-repeat
【发布时间】:2016-05-17 13:21:44
【问题描述】:

我是 Angular 新手,在需要帮助时遇到以下问题。 我正在使用角度图表指令http://jtblin.github.io/angular-chart.js/ 来构建图表板。我得到了以下场景:

我有一个指令,一个视图和一个输入代码在这里关联的控制器。 在控制器内部应该有一个数组 charts[] 保存对象。 这些对象应该与图表指令双向绑定。 这样做的适当方法是什么?我将动态地对我的图表进行 bild,而不需要为每个图表附加任何控制器。这可能吗?

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'
        }
    };
});

帮助将不胜感激!干杯菲利普

【问题讨论】:

    标签: angularjs charts ng-repeat directive


    【解决方案1】:

    编辑:显示工作示例的最终小提琴,与 OP 合作 - https://plnkr.co/edit/8fJ4u0U2fL4lYTioCbG0?p=preview

    您需要将 ng-repeat 中的“c”传递到图表指令中。

    这里有一个小提琴来演示: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”

    【讨论】:

    • 这是我的 Plunker plnkr.co/edit/ahIHQFCpmInk7UsO2WJX?p=preview - 不幸的是它对我不起作用 -.- 你知道怎么了吗?非常感谢您的大力帮助!
    • 万岁!那令人困惑。您必须定义chart-base 的基本css,然后将chart-type 设置为类型,这样就不是“chart-line”,而只是“Line”。 plnkr.co/edit/8fJ4u0U2fL4lYTioCbG0?p=preview
    • 使用角度图表和绑定的工作方式有一些细微的差别,所以我们可以在绑定数据/标签/系列/类型时省略{{}}
    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多