我有两个自定义日期选择指令
一天一次 一个用于选择范围
每个代码中大约50%的代码是重复的代码(大多数是用月份填充并选择一天),如果不是非常相似的话。我想尽可能地保持干燥,但有问题要弄清楚如何处理这个问题。
选项1 我最初的想法是有一个日历服务,可以保存一些共享功能,然后可以在任何一个指令中使用?这被认为是不好的惯例吗?
选项2 否则,我想到了一个带有所有html /初始值的日历E指令,例如给定月份中的天数和更改月份的能力。然后创建两个A指令,为每个执行功能?
选项3 ?????
我觉得我可以快速排除选项1,它会起作用。选项2听起来像是一个更优雅的解决方案,我宁愿写一些性感优雅的代码(这看起来有点愚蠢。) - 但最后我宁愿选择最好的方法。
选项3,如果您有其他想法,我会全力以赴
答案 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特定内容。
希望有所帮助!