Подтвердить что ты не робот

AngularJs $scope undefined, когда контроллеры находятся внутри модуля

Я пытаюсь использовать шаблон angular -seed с настройками по умолчанию. В controllers.js я использую

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

  }]);

Там $scope всегда undefined. Когда я вывожу контроллер из модуля и регистрирую его по всему миру, он отлично работает. Как здесь:

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

Может кто-нибудь объяснить мне, почему это?

4b9b3361

Ответ 1

Вы не можете смешивать такие вещи. Вам нужно решить одну из двух возможностей:

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

// possibility 1 - this is not safe for minification because changing the name
// of $scope will break Angular 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) {
    // ...
}]);

Я бы не советовал использовать другой синтаксис, который прямо объявляет Controller. Рано или поздно с ростом вашего приложения будет сложно поддерживать и отслеживать. Но если вам нужно, есть 3 возможности:

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'];

Ответ 2

Это правильный способ:

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

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

}]);

Ответ 3

Я также искал этот файл, кажется, вам нужно ввести '$scope' перед функцией, как показано ниже:

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

  }]);

Это похоже на смысл, я думаю, что это должно быть более ясным, хотя..

Ответ 4

Вы можете просто удалить '[' и ']', когда вы используете $scope.

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

    }
  ]);