Avec Angular 1.3+, vous ne pouvez plus utiliser la déclaration de contrôleur globale sur la portée globale (sans enregistrement explicite). Vous devrez enregistrer le contrôleur en utilisant la module.controller
syntaxe.
Exemple:-
angular.module('app', [])
.controller('ContactController', ['$scope', function ContactController($scope) {
$scope.contacts = ["[email protected]", "[email protected]"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}]);
ou
function ContactController($scope) {
$scope.contacts = ["[email protected]", "[email protected]"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}
ContactController.$inject = ['$scope'];
angular.module('app', []).controller('ContactController', ContactController);
C'est un changement radical, mais il peut être désactivé pour utiliser des globaux en utilisantallowGlobals
.
Exemple:-
angular.module('app')
.config(['$controllerProvider', function($controllerProvider) {
$controllerProvider.allowGlobals();
}]);
Voici le commentaire de la source angulaire: -
- vérifier si un contrôleur avec un nom donné est enregistré via
$controllerProvider
- vérifier si l'évaluation de la chaîne sur la portée actuelle renvoie un constructeur
- if $ controllerProvider # allowGlobals, vérifiez
window[constructor]
l' window
objet global (non recommandé)
.....
expression = controllers.hasOwnProperty(constructor)
? controllers[constructor]
: getter(locals.$scope, constructor, true) ||
(globals ? getter($window, constructor, true) : undefined);
Quelques vérifications supplémentaires: -
Assurez-vous de mettre également le nom de l'application dans la ng-app
directive sur votre élément racine angulaire (par exemple: - html
). Exemple: - ng-app = "myApp"
Si tout va bien et que vous rencontrez toujours le problème, n'oubliez pas de vous assurer que le bon fichier est inclus dans les scripts.
Vous n'avez pas défini le même module deux fois à des endroits différents, ce qui entraîne l'effacement des entités définies précédemment sur le même module.Exemple angular.module('app',[]).controller(..
et à nouveau dans un autre endroit angular.module('app',[]).service(..
(avec les deux scripts inclus bien sûr) peuvent entraîner le contrôleur précédemment enregistré sur le module app
à effacer avec la deuxième recréation du module.
J'ai eu ce problème parce que j'avais enveloppé un fichier de définition de contrôleur dans une fermeture:
Mais j'avais oublié d'appeler cette fermeture pour exécuter ce code de définition et dire à Javascript que mon contrôleur existait. Par exemple, ce qui précède doit être:
Notez le () à la fin.
la source
Je suis un débutant avec Angular et j'ai fait l'erreur de base de ne pas inclure le nom de l'application dans l'élément racine angulaire. Donc, changer le code de
à
travaillé pour moi. @PSL, a déjà couvert cela dans sa réponse ci-dessus.
la source
J'ai eu cette erreur parce que je ne comprenais pas la différence entre
angular.module('myApp', [])
etangular.module('myApp')
.Cela crée le module 'myApp' et écrase tout module existant nommé 'myApp':
angular.module('myApp', [])
Cela récupère un module existant 'myApp':
angular.module('myApp')
J'avais écrasé mon module dans un autre fichier, en utilisant le premier appel ci-dessus qui a créé un autre module au lieu de le récupérer comme je m'y attendais.
Plus de détails ici: https://docs.angularjs.org/guide/module
la source
Je viens de migrer vers angular 1.3.3 et j'ai constaté que si j'avais plusieurs contrôleurs dans différents fichiers lorsque l'application est remplacée et que j'ai perdu les premiers conteneurs déclarés.
Je ne sais pas si c'est une bonne pratique, mais peut-être peut-être utile pour une autre.
la source
J'ai eu ce problème lorsque j'ai accidentellement redéclaré
myApp
:Après la nouvelle déclaration,
Controller1
cesse de fonctionner et soulève l'erreur OP.la source
Vraiment un excellent conseil, sauf que la MÊME erreur PEUT se produire simplement en manquant le script critique inclus sur votre page racine
exemple:
page: index.html
Manquant
Lorsqu'une Route est informée du contrôleur et de la vue à servir:
Il est donc essentiel que le problème du contrôleur non défini puisse se produire dans cette erreur accidentelle de ne même pas référencer le contrôleur!
la source
Cette erreur peut également se produire lorsque vous avez un grand projet avec de nombreux modules. Assurez-vous que l'application (module) utilisée dans votre fichier angulaire est la même que celle que vous utilisez dans votre modèle, dans cet exemple " thisApp ".
app.js
index.html
la source
Si tout le reste échoue et que vous utilisez Gulp ou quelque chose de similaire ... réexécutez-le!
J'ai perdu 30 minutes en quadruple à tout vérifier alors qu'il ne manquait qu'un coup de pied rapide dans le pantalon.
la source
Si vous utilisez des routes (probabilité élevée) et que votre configuration a une référence à un contrôleur dans un module qui n'est pas déclaré comme dépendance, l'initialisation peut également échouer.
Par exemple, en supposant que vous ayez configuré ngRoute pour votre application, comme
Soyez prudent dans le bloc qui déclare les routes,
Déclarer
secondModule
comme une dépendance après «ngRoute» devrait résoudre le problème. Je sais que j'ai eu ce problème.la source
J'obtenais cette erreur parce que j'utilisais une ancienne version d'angular qui n'était pas compatible avec mon code.
la source
Ces erreurs se sont produites, dans mon cas, précédées d'erreurs de syntaxe à la fonction list.find (); 'find' méthode d'une liste non reconnue par IE11, doit donc remplacer par la méthode Filter, qui fonctionne à la fois pour IE11 et chrome. se référer à https://github.com/flrs/visavail/issues/19
la source
Cette erreur, dans mon cas, précédée d'une erreur de syntaxe à la méthode de recherche d'une liste dans IE11. donc remplacé la méthode de recherche par la méthode de filtre comme suggéré https://github.com/flrs/visavail/issues/19
puis au-dessus du contrôleur non défini l'erreur résolue.
la source
J'ai eu la même erreur en suivant un ancien tutoriel avec (pas assez vieux) AngularJS 1.4.3. La solution de loin la plus simple est d'éditer la source angular.js depuis
à
et suivez simplement le tutoriel tel quel, et les fonctions globales obsolètes fonctionnent simplement comme des contrôleurs.
la source
angular.module('app') .config(['$controllerProvider', function($controllerProvider) { $controllerProvider.allowGlobals(); }]);