两个Angular指令非常相似,我该如何共享代码?

时间:2015-12-31 19:08:11

标签: angularjs angular2-directives

我有两个自定义日期选择指令

一天一次 一个用于选择范围

每个代码中大约50%的代码是重复的代码(大多数是用月份填充并选择一天),如果不是非常相似的话。我想尽可能地保持干​​燥,但有问题要弄清楚如何处理这个问题。

选项1 我最初的想法是有一个日历服务,可以保存一些共享功能,然后可以在任何一个指令中使用?这被认为是不好的惯例吗?

选项2 否则,我想到了一个带有所有html /初始值的日历E指令,例如给定月份中的天数和更改月份的能力。然后创建两个A指令,为每个执行功能?

选项3 ?????

我觉得我可以快速排除选项1,它会起作用。选项2听起来像是一个更优雅的解决方案,我宁愿写一些性感优雅的代码(这看起来有点愚蠢。) - 但最后我宁愿选择最好的方法。

选项3,如果您有其他想法,我会全力以赴

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是使用Services作为共享逻辑。

对于指令行为,您应该使用嵌套指令。

答案 1 :(得分:1)

这里最好的办法是隔离50%的代码(或尽可能多的代码)并将其放入服务或工厂。我个人更喜欢服务。

app.service("ServiceName", function(injectors, ...)
{
   // code
})

然后设置指令以使用控制器(而不是链接),并将该服务注入控制器:

...
controller: function($scope, ServiceName, $otherInjectors ...)
{
  // call your ServiceName.methods() as needed
}
...

另一种选择是在现有的控制器上使用angular.extend,但我认为这对你想做的事情来说可能有点过分......这基本上是将你的2个几乎相同的指令简化为基本逻辑(服务)然后各个控制器中的UI特定内容。

希望有所帮助!