2016-05-11 6 views
0

Angularjs 1xを使用していますが、Angularjsフィルタで重複したコードをリファクタリングしようとしていますが、問題を正しく解決できません。非常にシンプルでなければなりません。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) 
     } 
    } 
    } 
} 
))(); 
+3

重複したコードを表示できますか?それが外の範囲から何を取るか見ることは重要です。 –

+0

@Jamesドミトリーは、あなたが私たちに本物のコードを示す必要があると言いました。あなたが書いているものについては、次のようにすることが可能です。(w || x || y || z){//複写コード} –

+0

これは独自のものですが、私の編集内容に似たものを書いています。実際のコードを明らかにすることなく、十分な情報を提供してバランスを取っています。 –

答えて

1

は、あなたがこのような何かを行うことができますベースとして、あなたの第二の例を取りますか?

これは大きな助けになりますが、もっと情報を与えることができれば、なぜ機能を正しく呼び出せないのですか?何かエラーが出ていますか?

(function() { 
function getLabelStrForIndPlan(ind, plan) { 
    if (ind === 'Y' && plan === 'State') { 
    return 'yes'; 
    } 
    else if (ind === 'N' && plan === 'Another State') { 
    return 'no'; 
    } 
} 

function abc(Input){ 
    return function(value){ 
    for(var i=0; i<3; i++){ 
     var fpwInd = Input[i].fpwInd; 
     var label = getLabelStrForIndPlan(fpwInd, fpw.plan); 

     if (label) { 
     fpwValues.push(weblService.returnLabel(label, $rootScope.label)); 
     break; 
     } 
    } 
    } 
} 
})(); 
+0

スコープエラーが問題でした。私はそれを呼び出す方法が正しくなく、関数が関数abcの中で見えないので、関数を呼び出すことができませんでした。私はこのようなことを試し、それがうまくいくかどうかを見てみましょう。 –

+0

私はuser1136560からコードを少し修正しましたが、彼は正しい解決策を考え出すために正しい道に沿って考えました。それでもコードは重複していますが、縮小されています。 –

関連する問題