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'];
Может кто-нибудь объяснить мне, почему это?
Ответы
Ответ 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() {
}
]);