angularjs - 获取附加到指令的过滤器

时间:2014-08-30 16:45:28

标签: angularjs

使用angular,我的情况是我编写了自定义指令,然后编写了一些过滤器。

我已经做了很多搜索,并且一旦附加了,就无法找到一种明确的方法来实际从指令中获取过滤器。他们是这样的;

<div ng-data-bind="Model.Tags | format:'json'"></div>

该指令看起来像......

.directive('ngDataBind', ["$parse", "$filter", function($parse, $filter){
   return {
      restrict: "A",
      scope: {
         ngDataBind: "="
      },
      link: function(scope, element, attributes, controller) {
         // I am hoping to get the value of 'format' here (which is 'json' in this case)
      }
   }
});

现在,过滤器只是非常简单的骨头。我还没有添加任何真正的功能,因为我需要做的很多事情都在指令中。

.filter('format', function(){
   return function(text, value) {

   }
});

所以在我编写的ngDataBind指令中,我希望得到format过滤器并将参数传递给它。

我查看了$filter服务,似乎没有这样做。我试图从指令上通过attributes传递的link参数解析它,但是所有这些都是一个巨大的字符串并不是那么有用。

在任何地方都有关于此的信息吗?

更新

经过与我相比有更多经验的人审核后,我采取了不同的方法,因为这显然不适合使用过滤器。

我要使用的方法是在指令上创建属性,例如表达式..

<div c-data-bind="{ value: 'Model.Tags', format: 'json' }"></div>

我选择了这种方法,因为预期输入中存在一定的一致性(总是要求将内容包含在''中而不是引用类型之间的不匹配),并且它允许扩展指令而不必稍后添加更多指令。我不确定这是不是一个好方法,但是...... 似乎正在工作。

1 个答案:

答案 0 :(得分:1)

你的方法已经结束了。指令不应该与过滤器有关。

过滤器将根据其逻辑处理绑定数据。

该指令将接收过滤后的数据并根据其逻辑对其进行操作。

这两个人都不需要知道另一个。如果你需要它们,你的设计是有缺陷的。

请参阅Separations of concern