我有两个自定义日期选择指令
一天一个一个用于选择范围
每个中大约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的东西。
希望能有所帮助!