2013-04-17 6 views
32

Ich habe noch ein anderes Problem mit der Verkleinerung. Diesmal wegen des $ scope-Dienstes, der an den Controller der Direktive übergeben wurde. Siehe unten Code:AngularJS: Minification Problem in der Direktive

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

Wenn ich den Controller-Teil auskommentiere, dann funktioniert es gut.

Wie Sie sehen können, habe ich die Array-Deklaration für die Direktive verwendet, so dass der $ -Dialog-Dienst Angular auch nach der Verkleinerung bekannt ist. Aber wie soll ich das für den $ scope Service auf dem Controller tun?

Antwort

73

Sie benötigen einen Controller zu erklären, wie folgt:

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

Voll Beispiel hier:

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

Eine Lösung von @ Sam vorgesehen funktionieren würde, aber es würde bedeuten Richtlinie des Controllers auf die gesamte Belichtungs Anwendung, die unnötig ist.

+0

das ist die von mir zur Verfügung gestellte Lösung :) Sam = OP ;-) Allerdings stelle ich den Controller nicht der ganzen Anwendung aus, sondern nur dem gesamten Modul, zu dem die Direktive gehört. Ich mag deine Herangehensweise, ich werde dafür gehen. – Sam

+0

Wenn ein AngularJS-Modul tatsächlich einem AngularJS-Modul ausgesetzt würde, hätte dies zur Folge, dass _an__ AngularJS-Modul darauf zugreifen könnte - das habe ich gemeint, indem ich es der gesamten Anwendung aussetzte. –

+0

AngularJS-Module können nur dann auf das Modul person.controllers zugreifen, wenn sie davon abhängig sind. Wenn sie diese Abhängigkeit nicht haben, sollten sie nicht darauf zugreifen können. Ist das nicht richtig? – Sam

1

ok, landete ich den Controller in einer separaten Datei zu erstellen bis:

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

dann in der Richtlinie, ordne ich den Controller nach Namen:

controller: 'personCtrl' 

nicht sicher, dass es der beste Weg ist. Es sieht aber sauber aus. Was denken Sie ?

+3

Dies würde funktionieren, aber es würde bedeuten, den Controller der Direktive der gesamten Anwendung auszusetzen, was unnötig ist. –