44 votes

AngularJs $ scope non défini lorsque les contrôleurs sont à l'intérieur d'un module

J'essaie d'utiliser le modèle angular-seed avec les paramètres par défaut. En controllers.js j'utilise

 angular.module('myApp.controllers', []).
  controller('MyCtrl1', [function($scope) {
      $scope.test = 'scope found!';
  }])
  .controller('MyCtrl2', [function() {

  }]);
 

Là, les $scope sont toujours indéfinis. Lorsque je sors le contrôleur du module et que je l’enregistre globalement, cela fonctionne bien. Comme ici:

 function MyCtrl1($scope) {
    $scope.test = "scope found!";
}
MyCtrl1.$inject = ['$scope'];
 

Quelqu'un pourrait-il m'expliquer pourquoi?

65voto

TheHippo Points 11900

Vous ne pouvez pas mélanger des choses comme ça. Vous devez choisir l'une des deux possibilités:

 app = angular.module('test', []);

// possibility 1 - this is not safe for minification because changing the name
// of $scope will break Angular's dependency injection
app.controller('MyController1', function($scope) {
    // ...
});

// possibility 2 - safe for minification, uses 'sc' as an alias for $scope
app.controller('MyController1', ['$scope', function(sc) {
    // ...
}]);
 

Je ne conseillerais pas d'utiliser l'autre syntaxe qui déclare directement Controller. Tôt ou tard, avec la croissance de votre application, il deviendra difficile de maintenir et de garder une trace. Mais si vous devez, il y a 3 possibilités:

 function myController1 = function($scope) {
    // not safe for minification
}

function myController2 = ['$scope', function(sc) {
    // safe for minification, you could even rename scope
}]

var myController3 = function(sc) {
    // safe for minification, but might be hard
    // to read if controller code gets longer
}
myController3.$inject = ['$scope'];
 

17voto

finishingmove Points 7927

C'est le bon moyen:

 angular.module('myApp.controllers', []);

angular.module('myApp.controllers').controller('MyCtrl1', ['$scope', function($scope) {

}]);
 

1voto

Dennis Tsoumas Points 102

Je cherchais aussi celui-ci, il semble que vous deviez taper '$scope' avant la fonction, comme ci-dessous:

     angular.module('myApp.controllers', []).
  controller('MyCtrl1', ['$scope', function($scope) {
      $scope.test = 'scope found!';
  }])
  .controller('MyCtrl2', ['$scope',function() {

  }]);
 

Cela a du sens, je pense que cela devrait être plus clair cependant ..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X