2016-04-05 22 views
0

DRYを防ぐために、関数にコードを挿入する必要があります。ここに私のコードの例があります。角度:コントローラースコープ内の再利用可能な関数

angular.module('crypt', ['ui.chart']) 
.controller('MainCtrl', ['$http', function($http) { 
    var self = this; 
    self.encrypt = function() { 
    $http.post('/encrypt', 
      {'crypt': {'text': self.plain, 'shift':self.rot}}) 
    .then(function(response) { 
     self.encrypted = response.data.encrypted; 
     self.plain = ''; 
    // reusable function goes here 
    // var frequencyArr = response.data.frequency; 
    // var frequencyArrLength = frequencyArr.length; 
    // if (frequencyArrLength) self.cryptChart = [frequencyArr]; 
    }); 
    }; 
    self.decrypt = function() { 
    $http.post('/decrypt', 
      {'crypt': {'text': self.encrypted, 'shift':self.rot}}) 
    .then(function(response) { 
     self.plain = response.data.plain; 
     self.encrypted = ''; 
     // and here 
     // the stuff to become a function 
     var frequencyArr = response.data.frequency; 
     var frequencyArrLength = frequencyArr.length; 
     if (frequencyArrLength) self.cryptChart = [frequencyArr]; 
    }); 
    }; 
    // ... 
}]) 

どのように私はその3行をパックし、角度の方法で再利用可能な機能を作るのですか?たぶん、このような

答えて

3

は:

angular.module('crypt', ['ui.chart']) 
.controller('MainCtrl', ['$http', function($http) { 
    var self = this; 

    function cryption(decrypt, callBack) { 
    $http.post(
     decrypt ? '/decrypt' : '/encrypt', 
     {crypt: {text: decrypt ? self.encrypted : self.plain, shift: self.rot }}) 
    .then(callBack); 
    } 

    function cryptChart(response) { 
    var frequencyArr = response.data.frequency; 
    var frequencyArrLength = frequencyArr.length; 
    if (frequencyArrLength) // can be simplyfied to response.data.frequency.length 
     self.cryptChart = [frequencyArr]; 
    } 

    self.encrypt = cryption(false, function(response) { 
     self.encrypted = response.data.encrypted; 
     self.plain = ''; 

     cryptChart(response);  
    }); 
    self.decrypt = cryption(true, function(response) { 
     self.plain = response.data.plain; 
     self.encrypted = ''; 

     cryptChart(response); 
    }); 
    // ... 
}]) 

私は少しさらに行き、共有$ http.postが同様の機能を呼び出す抽出しました。

関連する問題