Angularjs en iyi uygulamayı küçültür


103

Http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html okuyorum ve javascript'inizi küçültürseniz, angularjs bağımlılık enjeksiyonunun problemleri olduğu ortaya çıktı. Merak ediyorum yerine

var MyController = function($scope, $http) {
    $http.get('https://api.github.com/repos/angular/angular.js/commits')
      .then(function(response) {
        $scope.commits = response.data
      })
  }

kullanmalısın

var MyController = ['$scope', '$http', function($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}]

Sonuç olarak, ikinci pasajın angularjs'nin eski versiyonu için olduğunu sanıyordum ama ....

Her zaman enjeksiyon yolunu (ikincisi) kullanmalı mıyım?

Yanıtlar:


103

Evet , her zaman! Bu şekilde, miniferiniz $ kapsamını a değişkenine ve $ http değişkenini b değişkenine dönüştürse bile, kimliği dizelerde korunur .

AngularJS belgelerinin bu sayfasına bakın , Küçültme Üzerine Bir Not'a gidin .

GÜNCELLEME

Alternatif olarak, bu ayrıntıyı önlemek için oluşturma işleminizde ng-annotate npm paketini kullanabilirsiniz .


Bu ve diğer bazı konular egghead.io'da çok iyi açıklanmıştır. JFYI
Wottensprels

@Sprottenwels: Evet! Orada birçok yararlı kaynak var.
Selvam Palanimalai

8
Bu daha ayrıntılı sözdizimini kullanmak yerine, küçültmeyi çalıştırmadan önce ngmin ve bir oluşturma aracı (Grunt gibi) kullanabilirsiniz. Bu şekilde doğru şekilde küçültebilir, ancak bağımlılık enjeksiyon sözdizimini de kullanabilirsiniz.
jkjustjoshing



36

İkinci varyantı kullanmak daha güvenlidir ancak ilk varyantı ngmin ile güvenle kullanmak da mümkündür .

GÜNCELLEME:
Artık ng-annotate , bu sorunu çözmek için yeni bir varsayılan araç haline geldi.


7

Evet, açık bağımlılık enjeksiyonu kullanmanız gerekir (ikinci değişken). Ama bu yana açısal 1.3.1 yapabilirsiniz örtülü kapatmak bir kez (küçültme öncesi) de yeniden adlandırma ile ilgili olası sorunları çözmek için gerçekten yararlı olur, bağımlılık enjeksiyon.

strictDiConfig özelliğini kullanarak örtük DI kapatma :

angular.bootstrap(document, ['myApp'], {
    strictDi: true
});

ng-strict-diDirektif kullanarak örtük DI kapatılıyor :

<html ng-app="myApp" ng-strict-di>

7

Sadece şunu belirtmek için: eğer kullanırsan

Yeoman

beğenmeye gerek yok

var MyController = ['$scope', '$http', function($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}]

çünkü minify sırasında homurdanma, DI'yi nasıl yöneteceğinizi hesaba katın.



0

Burada$inject belirtildiği gibi kullanmak isteyebilirsiniz :

MyController.$inject = ['$scope', '$http'];

function MyController($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}

0

Sorunları Teşhis Etmek İçin Katı Bağımlılık Enjeksiyonu Kullanın

İle Örtülü Annotation minified zaman, kod kıracak.

Dokümanlar'dan:

Örtülü Ek Açıklama

Dikkat: Kodunuzu küçültmeyi planlıyorsanız, hizmet adlarınız yeniden adlandırılacak ve uygulamanızı bozacaktır.

Katı DI modunu seçmekle ng-strict-diaynı öğeye bir yönerge ekleyebilirsiniz ng-app.

<body ng-app="myApp" ng-strict-di>

Katı mod, bir hizmet örtük ek açıklamaları kullanmaya çalıştığında bir hata atar.

Bu, sorunları bulmada faydalı olabilir.

Daha fazla bilgi için, bkz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.