2016-04-05 20 views
0

Bir işlevi kod içine DRY'yi önlemek için bir işleve enjekte etmem gerekiyor. İşte benim kodumun bir örneği.Açısal: denetleyici kapsamı içinde yeniden kullanılabilir işlev

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]; 
    }); 
    }; 
    // ... 
}]) 

Peki bu 3 satırı nasıl paketlerim ve Açısal olarak yeniden kullanılabilir bir işlev yapabilirim? Belki böyle

cevap

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); 
    }); 
    // ... 
}]) 

Ben biraz daha ileri gitti ve paylaşılan $ http.post yanı fonksiyonu içine çağrı çıkarıldı.

İlgili konular