如何进一步抽象具有过多重复逻辑的指令

时间:2015-03-19 23:26:09

标签: javascript angularjs oop

我在代码库上工作,其中多个指令使用基本上重复的逻辑,只有一个通过范围更改传递的对象。例如:

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中复制了大多数(但不是全部)逻辑。写这个一次并且反复使用各种对象/案例的最明智的方法是什么?

2 个答案:

答案 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;
}
相关问题