将不同的值传递给相同的指令

时间:2014-07-16 07:41:22

标签: angularjs angularjs-directive

我有一个图表指令,我在其中创建一个Morris.js图。我把这个指令放在我的网站上5次。

我有一个处理所有不同数据的控制器。

  

如何才能使我的指令足够通用以处理不同的数据?

我把所有东西放在同一范围内。

  1. 我的方法是使用data-attribute:
  2. 所以我可以决定数据属性我应该使用哪些数据。

    <div id="chart" data="income" barchart></div>
    

    我的指令如下:

      angular.module('app')
      .directive('donutchart', function () {
        return {
          link: function(scope, element, attrs) {
            if(attrs.data === "income") var data = scope.income_data;
            new Morris.Donut({element: element[0].id, data: data});
          }
        };
      });
    

    但是,将不同数据处理到同一指令并保持非常通用的方法是什么? 我想将数据属性作为变量名称,但仍然不是&#34;清理&#34;。

2 个答案:

答案 0 :(得分:1)

你必须在你的指令

中添加它
scope: {
    id: '=id',
    data: '=data',
  },

如果你想在你的链接中使用它,它虽然是attrs例如:attrs.id

答案 1 :(得分:1)

我认为你可以写这样的东西

app.directive('donutchart', function () {
  return {
    scope: {
      mymodel: "=data",
      id: "@"
    },
    link: function(scope, element, attrs) {
      new Morris.Donut({element: scope.id, data: scope.mymodel});
    }
  };
});  

隔离范围中的id:“@”声明意味着您希望将值作为字符串而不是表达式,