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



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

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

每个中大约50%的代码是重复的代码(主要是用天数填充月份并选择一天),如果不是很相似的话。我试图尽可能保持干燥,但在想办法解决这个问题时遇到了问题。

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

选项2否则,我想用一个带有所有html/初始值的calendar E指令,比如给定月份的天数和更改月份的能力。然后创建两个A指令,分别用于执行功能的指令?

选项3?????

我觉得我可以很快解决方案1,它会起作用的。选项2对我来说听起来是一个更优雅的解决方案,我宁愿写一些性感优雅的代码(这似乎有点愚蠢。)-但最终我宁愿采取最好的方法。

选项3,如果你有其他想法,我会洗耳恭听

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

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

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

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

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

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

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

希望能有所帮助!