当控制器在模块内时,AngularJs $ scope未定义

时间:2013-04-29 17:32:01

标签: angularjs

我正在尝试使用带有默认设置的angular-seed模板。在controllers.js我使用

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

  }]);

$scope始终未定义。 当我将控制器从模块中取出并在全局注册时,它可以正常工作。在这里:

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

有人可以向我解释为什么会这样吗?

4 个答案:

答案 0 :(得分:65)

你不能混合这样的东西。您需要决定两种可能性中的一种:

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

我不建议使用直接声明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'];

答案 1 :(得分:17)

这是正确的方法:

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

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

}]);

答案 2 :(得分:0)

我也在搜索那个,似乎你需要在函数前键入'$scope',如下所示:

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

  }]);

有点意义,我认为应该更清楚......

答案 3 :(得分:-1)

当你使用$ scope时,你可以简单地删除'['和']'。

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

    }
  ]);