En utilisant AngularJS avec Scala Play, j'obtiens cette erreur.
Erreur: l'argument 'MainCtrl' n'est pas une fonction, n'est pas défini
J'essaye de créer un tableau composé des jours de la semaine.
Veuillez jeter un œil à mon code. J'avais vérifié le nom du contrôleur, mais cela semble correct. Remarque: Code utilisé à partir de cette réponse SO
index.scala.html
@(message: String)
@main("inTime") {
<!doctype html>
<html lang="en" ng-app>
<head>
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
</head>
<div ng-controller="MainCtrl">
<table border="1">
<tbody ng-repeat='(what,items) in data'>
<tr ng-repeat='item in items'>
<td ngm-if="$first" rowspan="{{items.length}}">{{what}}</td>
<td>{{item}}</td>
</tr>
</tbody>
</table>
</div>
</html>
}
MainCtrl.js
(function() {
angular.module('[myApp]', []).controller('MainCtrl', function($scope) {
$scope.data = {
Colors: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
}
});
}());
angularjs
playframework
Kevin Meredith
la source
la source
ng-app
pouvez-vous le changer enng-app=myApp
Réponses:
Supprimer le
[]
du nom ([myApp]) du moduleEt ajoutez
ng-app="myApp"
au html et cela devrait fonctionner.la source
[]
indique que vous créez un nouveau module. La suppression du deuxième paramètre indique que vous récupérez un module existant. Donc, une possibilité de vérifier est si vous appelezangular.module
deux fois, les deux fois en incluant le deuxième paramètre. Si tel est le cas, la dernière occurrence écrasera la seconde, masquant toutes les définitions de contrôleurs jusqu'à ce point.[]
il se réfère au premier paramètre où l'OP a[myApp]
au lieu demyApp
. Il ne parle pas du deuxième paramètre.PREMIÈRE. vérifiez si vous avez correct
controller
dans les définitions de route, comme les noms de contrôleur que vous définissezdes noms de contrôleurs différents dans cet exemple entraîneront des erreurs, mais cet exemple est correct
DEUXIÈME vérifiez si vous avez importé votre fichier javascript:
<script src="modules/community/controllers/CommunityMembersCtrl.js"></script>
la source
index.html
J'ai eu le même message d'erreur (dans mon cas: "L'argument 'languageSelectorCtrl' n'est pas une fonction, est indéfini").
Après une comparaison fastidieuse avec le code de Angular seed, j'ai découvert que j'avais précédemment supprimé une référence au module des contrôleurs dans app.js. (repérez-le à https://github.com/angular/angular-seed/blob/master/app/js/app.js )
Alors j'ai eu ceci:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.directives'])
Cela a échoué.
Et quand j'ai ajouté la référence manquante:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.controllers', 'MyApp.directives'])
Le message d'erreur a disparu et Angular a pu instancier à nouveau les contrôleurs.
la source
Parfois, cette erreur est le résultat de deux
ng-app
directives spécifiées dans le html. Dans mon cas par erreur j'avais spécifiéng-app
dans monhtml
tag etng-app="myApp"
dans lebody
tag comme ceci:la source
Cela m'a pris au sérieux 4 HEURES (y compris des recherches interminables sur SO) mais finalement je l'ai trouvé: par erreur (involontairement) j'ai ajouté un espace quelque part.
Peux tu le repérer?
angular.module('bwshopper.signup').controller('SignupCtrl ', SignupCtrl);
Alors ... 4 heures plus tard, j'ai vu que ça devrait être:
angular.module('bwshopper.signup').controller('SignupCtrl', SignupCtrl);
Presque impossible à voir à l'œil nu.
Cela souligne l'importance vitale du contrôle des révisions (git ou autre) et des tests unitaires / de régression.
la source
Controller
placecontroller
et c'était tout ce qu'il fallait.J'ai rencontré le même problème et dans mon cas, cela se produisait à la suite de ce problème:
J'ai fait définir les contrôleurs dans un module séparé (appelé `` myApp.controllers '') et injecté dans le module principal de l'application (appelé `` myApp '') comme ceci:
Un collègue a poussé un autre module de contrôleur dans un fichier séparé mais avec exactement le même nom que le mien (c'est-à-dire «myApp.controllers»), ce qui a causé cette erreur. Je pense que parce qu'Angular s'est confondu entre ces modules de contrôleur. Cependant, le message d'erreur n'a pas été très utile pour découvrir ce qui ne va pas.
la source
Dans mon cas (ayant une page d'aperçu et une page "ajouter") je l'ai obtenu avec ma configuration de routage comme ci-dessous. Il donnait le message pour AddCtrl qui ne pouvait pas être injecté ...
En raison de l'
when('/'
itinéraire, tous mes itinéraires sont allés à l'aperçu et le contrôleur n'a pas pu être mis en correspondance sur le rendu de la page / add route. C'était déroutant car j'ai vu le modèle add.html mais son contrôleur était introuvable.Suppression de la route «/» lorsque la casse a résolu ce problème pour moi.
la source
Si vous êtes dans un sous-module, n'oubliez pas de déclarer le module dans l'application principale. c'est à dire :
Si vous ne déclarez pas subModule1 dans mainApp, vous obtiendrez un "[ng: areq] Argument" MyController "n'est pas une fonction, n'est pas défini.
la source
Le deuxième point d'Уmed était mon écueil, mais juste pour mémoire, peut-être que ça aide quelqu'un quelque part:
J'ai eu le même problème et juste avant de devenir fou, j'ai découvert que j'avais oublié d'inclure mon script de contrôleur.
Comme mon application est basée sur ASP.Net MVC, j'ai décidé de rester sain d'esprit en insérant l'extrait de code suivant dans mon App_Start / BundleConfig.cs
et dans Layout.cshtml
Maintenant, je n'aurai plus jamais à penser à inclure les fichiers manuellement. Avec le recul, j'aurais vraiment dû le faire lors de la mise en place du projet ...
la source
J'ai eu une erreur raisonnable avec LoginController, que j'ai utilisé dans main index.html. J'ai trouvé deux façons de résoudre:
en définissant $ controllerProvider.allowGlobals (), j'ai trouvé ce commentaire dans la liste de modification angulaire "cette option peut être pratique pour migrer d'anciennes applications, mais veuillez ne pas l'utiliser dans de nouvelles!" commentaire original sur Angular
app.config (['$ controllerProvider', function ($ controllerProvider) {$ controllerProvider.allowGlobals ();}]);
mauvais constructeur du contrôleur d'enregistrement
avant
maintenant
'app' vient de app.js
la source
J'ai eu la même erreur avec une grosse erreur:
Tu vois ? j'ai oublié le '' autour du premier $ scope, la bonne syntaxe est bien sûr:
Une première erreur que je n'ai pas vue immédiatement était: " $ scope n'est pas défini ", suivi de " Error: [ng: areq] Argument 'TreeEditStepControlsCtrl' n'est pas une fonction, est indéfini "
la source
Cela pourrait-il être aussi simple que de mettre votre actif entre "" et tout ce qui nécessite des citations à l'intérieur avec ""?
devient
Cela pourrait causer des problèmes d'analyse
la source
Pour résoudre ce problème, j'ai dû découvrir que j'avais mal orthographié le nom du contrôleur dans la déclaration des routes angulaires:
la source
Dans mon cas, c'était une simple faute de frappe dans
index.html
:cela aurait dû être
sans le supplément
s
au nom du contrôleur.la source
Il s'avère que c'est le cache du navigateur, utilisant Chrome ici. Cochez simplement la case "Désactiver le cache" sous Inspecter (élément) a résolu mon problème.
la source
Parce que cela apparaît dans Google lorsque vous essayez de trouver une réponse à: "Erreur: l'argument" n'est pas une fonction, est indéfini ".
Il est possible que vous essayiez de créer le même module deux fois.
Source: https://docs.angularjs.org/api/ng/function/angular.module#overview
Exemple:
angular.module('myApp', [])
Est utilisé pour créer un module sans injecter de dépendances.angular.module('myApp')
(Sans argument) est utilisé pour obtenir un module existant.la source
Il semble y avoir de nombreuses solutions de travail suggérant que l'erreur a de nombreuses causes réelles .
Dans mon cas, je n'avais pas déclaré le contrôleur dans
app/index.html
:Erreur disparue.
la source