如何在Angular JS中为Morris JS图创建一个指令

And*_*iou 4 javascript node.js angularjs morris.js angularjs-directive

我试图通过创建一个Angular JS指令使用Morris JS创建一个图形.我的指令代码是:

Reporting.directive('morrisLine', function(){
  return {
    restrict: 'EA',
    template: '<div id="call-chart">test2</div>',
    scope: {
        data: '=', //list of data object to use for graph
        xkey: '=',
        ykey: '='
    },
    link: function(scope,element,attrs){
      new Morris.Line({
          element: element,
          data: [
                { year: '2008', value: 20 },
                { year: '2009', value: 10 },
                { year: '2010', value: 5 },
                { year: '2011', value: 5 },
                { year: '2012', value: 20 }
              ],
          xkey: '{year}',
          ykey: ['value'],
      });
   }
  };
});
Run Code Online (Sandbox Code Playgroud)

我在浏览器上检查控制台时收到的错误代码是:

TypeError: Cannot call method 'match' of undefined
    at Object.t.parseDate (eval at <anonymous> (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3:4904), <anonymous>:1:9523)
    at n.eval (eval at <anonymous> (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3:4904), <anonymous>:1:3297)
    at n.t.Grid.r.setData (eval at <anonymous> (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3:4904), <anonymous>:1:3888)
    at n.r (eval at <anonymous> (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3:4904), <anonymous>:1:1680)
    at new n (eval at <anonymous> (http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3:4904), <anonymous>:1:11953)
    at link (http://127.0.0.1:8000/static/js/app/directives/directives.js:94:20)
    at j (http://127.0.0.1:8000/static/js/libs/angular/angular.min.js:43:157)
    at e (http://127.0.0.1:8000/static/js/libs/angular/angular.min.js:38:463)
    at e (http://127.0.0.1:8000/static/js/libs/angular/angular.min.js:38:480)
    at e (http://127.0.0.1:8000/static/js/libs/angular/angular.min.js:38:480) <div morris-line="" class="ng-isolate-scope ng-scope" style="position: relative;"> 
Run Code Online (Sandbox Code Playgroud)

错误代码指向的部分是说的部分

 element : element, 
Run Code Online (Sandbox Code Playgroud)

我是Angular JS和指令的新手,我希望有人能指出我如何处理这个问题的正确方向.谢谢!

Dar*_*ode 14

这就是我对莫里斯图表的看法.例子是条形图:

sampleApp.directive('barchart', function() {

    return {

        // required to make it work as an element
        restrict: 'E',
        template: '<div></div>',
        replace: true,
        // observe and manipulate the DOM
        link: function($scope, element, attrs) {

            var data = $scope[attrs.data],
                xkey = $scope[attrs.xkey],
                ykeys= $scope[attrs.ykeys],
                labels= $scope[attrs.labels];

            Morris.Bar({
                    element: element,
                    data: data,
                    xkey: xkey,
                    ykeys: ykeys,
                    labels: labels
                });
        }

    };

});
Run Code Online (Sandbox Code Playgroud)

然后你可以使用它与这个元素:

<barchart xkey="xkey" ykeys="ykeys" labels="labels" data="myModel"></barchart>
Run Code Online (Sandbox Code Playgroud)

其中myModel是要在指令中传递的数据数组,它应该具有与morris图表兼容的正确格式.仔细研究该对象如何在指令中的"link"函数中传递.

这是一个完整的工作示例:http://jsbin.com/ayUgOYuY/5/edit?html,js,output