我正在尝试使用带有默认设置的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'];
有人可以向我解释为什么会这样吗?
答案 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() {
}
]);