如何在Angularjs的闭包中重构重复的代码?

时间:2016-05-11 13:36:22

标签: javascript angularjs refactoring

我们正在使用Angularjs 1x而我试图在Angularjs过滤器中重构一些重复的代码,但是我在纠正它时遇到了问题。应该很简单。

我们有一个使用匿名自执行函数使用过滤器的标准结构,类似于下面的代码。我在for循环中有一些带有重复代码的if / else块,我想创建一个可以消除重复的函数,但是,我似乎无法正确调用该函数。我该怎么做呢?

(function() {
  //Named function
  function abc(Input){
    return function(value){
      for(var i=0; i<3; i++){
        if(w){
            //Duplicate code here
         } else if(x){
            //Duplicate code here
         } else if(y){
            //Duplicate code here
         } else if(z)
       }
     }
  }
}
))();

这是类似于重复代码的内容,它是每个块中完全相同的重复代码。我们有专门的服务来处理标签。

if(Input[i].fpwInd === 'Y' && fpw.plan === 'State') {
    fpwValues.push(weblService.returnLabel("yes", $rootScope.label));
    break;
}else if(Input[i].fpwInd === 'N' && fpw.plan === 'Another State') {
    fpwValues.push(weblService.returnLabel("no", $rootScope.label));
    break;
}

这类似于最终的代码:

(function() {

  var fwp = function(input, plan){
    if(input == "value" && plan == "somevalue")
    fpwValues.push(weblService.returnLabel("yes", $rootScope.label));
    //rest of the if/else code here...
};  

  function abc(){
    return function(value){
      for(var i=0; i<3; i++){
        if(w){
            fwp(input, plan);
            break;
         } else if(x){
            fwp(input, plan);
            break;
         } else if(y){
            fwp(input, plan);
            break;
         } else if(z)
       }
     }
  }
}
))();

1 个答案:

答案 0 :(得分:1)

以你的第二个例子为基础你可以做这样的事吗?

如果你可以提供更多信息,虽然这将是一个很大的帮助 - 为什么你不能正确地调用这个功能?你有任何错误吗?

Option Explicit
Public oldValue As Variant

Public Sub Worksheet_SelectionChange(ByVal Target As Range)

    oldValue = Target.Value

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oldColor

    If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
        If Target.Value <> oldValue Then
            oldColor = Target.Font.ColorIndex
            Target.Characters(Len(oldValue) + 1, Len(Target) - Len(oldValue)).Font.ColorIndex = IIf(oldColor = 3, 5, 3)
        End If
    End If

End Sub