我在代码库上工作,其中多个指令使用基本上重复的逻辑,只有一个通过范围更改传递的对象。例如:
return {
restrict: 'A',
scope:{
someObject:"="
},
link: function( scope, element, attrs ) {
scope.getSomeObject = function(){
...
return scope.someObject.$$getSomeObject;
...
}
scope.saveSomeObject = function(){
...
scope.someObject.$$saveSomeObject();
...
}
scope.removeSomeObject = function(){
...
scope.someObject.$$removeSomeObject();
...
}
}
每个功能的逻辑都比较复杂,但基本上我所表现的。一般来说,功能几乎完全相同,不过在这里和那里会弹出特殊情况。对我而言,似乎指令基本上是为了解决每次必须编写此代码的问题而创建的,并且当发现错误时,必须在任何地方修复它。这些指令也在其各自的templateUrls中复制了大多数(但不是全部)逻辑。写这个一次并且反复使用各种对象/案例的最明智的方法是什么?
答案 0 :(得分:1)
如果你的意思是你想从指令中提取公共代码到某个共享位置,我认为你应该开始使用服务..然后将它们注入你的指令
答案 1 :(得分:1)
这看起来像是使用'required'指令的完美用例。 查看指令定义对象的'require'属性的文档。
例如,您可以定义一个名为someObject
的指令,并在您的自定义指令中要求它。
<my-directive some-object="somethingOnParentScope"></my-directive>
在您的myDirective
定义中,您可以执行类似
return {
restrict: 'A',
require: 'someObject',
link: function( scope, element, attrs, someObjectCtrl ) {
// if you need to make someObjectCtrl functionality available through templates,
// you will still need to add it to the scope
scope.someFunction = someObjectCtrl.someFunction;
}