6

Bu pasajı AngularJS by Brad Green dan düşünün. İlk öğe bağımlılık adıyla "$rootScope" ile sadece bir dize ve ikinci öğe bir fonksiyonudur burada "butterbar" yönergesi için o bir dizide geçtiğiAngularJS'de neden dizileri geçiyorlar?

var directives = angular.module('guthub.directives', []); 

directives.directive('butterbar', ['$rootScope', 
    function ($rootScope) { 
     return { 
      link: function (scope, element, attrs) { 
       element.addClass('hide'); 

       $rootScope.$on('$routeChangeStart', function() { 
        element.removeClass('hide'); 
       }); 

       $rootScope.$on('$routeChangeSuccess', function() { 
        element.addClass('hide'); 
       }); 
      } 
     }; 
    }] 
); 

directives.directive('focus', function() { 
    return { 
     link: function (scope, element, attrs) { 
      element[0].focus(); 
     } 
    }; 
}); 

dikkat edin. Bu işlev, $rootScope'da bir bağımlılık bildirir. Neden kendimizi burada tekrarlıyoruz? Mümkün görünüyor Özellikle sadece bunu: Bir dize olmak bağımlılık adı önemi çeşit sahip olduğunu tahmin ediyorum

directives.directive('butterbar', function ($rootScope) { 
    return { 
     link: function (scope, element, attrs) { 
      element.addClass('hide'); 

      $rootScope.$on('$routeChangeStart', function() { 
       element.removeClass('hide'); 
      }); 

      $rootScope.$on('$routeChangeSuccess', function() { 
       element.addClass('hide'); 
      }); 
     } 
    }; 
}); 

. Herkes bana neden kitap boyunca (ve sadece direktifler için değil) bunu yaptığını söyleyebilir mi?

+1

Bağımlılık enjeksiyonu vs minification. – elclanrs

+0

Dört kelimelik netlik :) – Chev

cevap

13

JavaScript küçültüldüğünde, parametre adları genellikle a gibi daha kısa bir şeye değiştirilir. Bu bağımlılık enjeksiyonunu kırar.

Eğer bir dizi kullanırsanız, Açısal ne enjekte edileceğini ve nereye enjekte edileceğini bilir. Bu dizi ile çalışır çünkü dizinin dize öğeleri küçültme tarafından değiştirilmemiş.

app.controller('test', function($scope, $someProvider) { 
}); 

küçültülmüş kodu şöyle görünebilir: Bu örnekte

app.controller('test',function(a,b){}); 

Açısal enjekte bilmiyor alırsak, bu artık, çalışacak bununla oysa:

küçültülmüş kod şu şekilde olabilir:

app.controller('test',['$scope','$someProvider',function(a,b) {}]); 

Bu hala işe yarar çünkü Angular hala ne enjekte edeceğini bilir. Angular tutorial’daki kıymetlendirme notuna bakın.

Genellikle üretime hazır olduğumda dizi stilini ekliyorum.

+0

Harika. Açıklama için teşekkürler. Bu, dizideki bağımlılıkların sırasının argümanların sırasına göre fonksiyona uyması gerektiği anlamına mı geliyor? Sanırım öyle mi, evet? – Chev

+0

Evet öyle. Onları yanlış sıraya sahipseniz, bağımlılıklar uyuşmaz. –

+0

Mükemmel. Bana izin verir vermez kabul edeceğim :) – Chev