2013-04-17 20 views
32

Henüz küçültme ile ilgili başka bir sorunum var. Bu sefer, direktifin denetleyicisine geçirilen $ kapsam hizmeti nedeniyle. Aşağıya bakın:AngularJS: yönerge içinde mineleme sorunu

angular.module('person.directives'). 
directive("person", ['$dialog', function($dialog) { 
return { 
    restrict: "E", 
    templateUrl: "person/views/person.html", 
    replace: true, 
    scope: { 
     myPerson: '=' 
    },  
    controller: function ($scope) 
    {     
     $scope.test = 3;     
    } 
} 
}]); 

Denetleyici bölümünü açıklarsam, o zaman iyi çalışır.

Gördüğünüz gibi, yönerge için dizi bildirimini kullandım; bu nedenle, $ dialog hizmeti, küçülmeden sonra bile Açısal olarak bilinir. Fakat denetleyicideki $ kapsam hizmeti için bunu nasıl yapmalıyım?

cevap

73

Bir denetleyici ilan etmek gerekir:

controller: ['$scope', function ($scope) 
    {     
     $scope.test = 3;     
    }] 
burada

için tam bir örnek:

angular.module('person.directives'). 
directive("person", ['$dialog', function($dialog) { 
return { 
    restrict: "E", 
    templateUrl: "person/views/person.html", 
    replace: true, 
    scope: { 
     myPerson: '=' 
    },  
    controller: ['$scope', function ($scope) 
    {     
     $scope.test = 3;     
    }] 
} 
}]); 

@Sam tarafından sağlanan çözüm için çalışacak ama bütüne yönerge kontrolörü açığa anlamına gelecektir gereksiz olan uygulama.

+0

benim tarafımdan sağlanan çözüm budur :) Sam = OP ;-) Ancak, denetleyiciyi tüm uygulamaya, yalnızca yönergenin ait olduğu tüm modüle göstermiyorum. Yaklaşımını beğendim, bunun için gideceğim. – Sam

+0

Aslında bir AngularJS modülüne maruz bırakmak, _any_ AngularJS modülünün buna erişebileceği anlamına gelir - bu, tüm uygulamaya göstererek kastettiğim şeydir. –

+0

AngularJS modülleri person.controllers modülüne ancak bağlı olduklarında erişebilir. Bu bağımlılığa sahip değillerse, erişememeleri gerekir. Bu doğru değil mi? – Sam

1

Tamam, ben ayrı bir dosyada denetleyicisi oluşturma sona erdi:

angular.module('person.controllers').controller('personCtrl', ['$scope', function ($scope) { 
$scope.test = 3; 
}]); 

sonra yönergede, ben adıyla denetleyicisi atamak: en iyi yoldur

controller: 'personCtrl' 

Emin değilim. Temiz görünüyor. Ne düşünüyorsun ? aşağıdaki gibi

+3

Bu işe yarar, ancak yönergenin denetleyicisini gereksiz olan tüm uygulamaya göstermesi anlamına gelir. –