Bei Verwendung von AngularJS mit Scala Play wird dieser Fehler angezeigt.
Fehler: Argument 'MainCtrl' ist keine Funktion, wurde undefiniert
Ich versuche eine Tabelle zu erstellen, die aus den Wochentagen besteht.
Bitte schauen Sie sich meinen Code an. Ich hatte den Namen des Controllers überprüft, aber das scheint richtig zu sein. Hinweis: Der aus dieser SO- Antwort verwendete Code
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
quelle
quelle
ng-app
können Sie es ändern inng-app=myApp
Antworten:
Entfernen Sie das
[]
aus dem Namen ([myApp]) des ModulsUnd
ng-app="myApp"
zum HTML hinzufügen und es sollte funktionieren.quelle
[]
zeigt an, dass Sie ein neues Modul erstellen. Das Entfernen des zweiten Parameters zeigt an, dass Sie ein vorhandenes Modul abrufen. Eine Möglichkeit zu überprüfen ist also, ob Sieangular.module
zweimal aufrufen , beide Male einschließlich des zweiten Parameters. In diesem Fall überschreibt das spätere Auftreten das zweite und verbirgt alle Definitionen von Controllern bis zu diesem Punkt.[]
, bezieht er sich auf den ersten Parameter, den das OP[myApp]
anstelle von hatmyApp
. Er spricht nicht über den zweiten Parameter.ZUERST. Überprüfen Sie, ob die Routendefinitionen korrekt sind
controller
, genau wie die Controller-Namen, die Sie definierenUnterschiedliche Controller-Namen in diesem Beispiel führen zu Fehlern, aber dieses Beispiel ist korrekt
ZWEITE Prüfung, ob Sie Ihre Javascript-Datei importiert haben:
<script src="modules/community/controllers/CommunityMembersCtrl.js"></script>
quelle
index.html
Ich hatte die gleiche Fehlermeldung (in meinem Fall: "Argument 'languageSelectorCtrl' ist keine Funktion, wurde undefiniert").
Nach einem langwierigen Vergleich mit dem Code von Angular Seed stellte ich fest, dass ich zuvor einen Verweis auf das Controller-Modul in app.js entfernt hatte. (Finde es unter https://github.com/angular/angular-seed/blob/master/app/js/app.js )
Also hatte ich folgendes:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.directives'])
Dies ist fehlgeschlagen.
Und als ich die fehlende Referenz hinzufügte:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.controllers', 'MyApp.directives'])
Die Fehlermeldung verschwand und Angular konnte die Controller erneut instanziieren.
quelle
Manchmal ist dieser Fehler auf zwei
ng-app
im HTML angegebene Anweisungen zurückzuführen. In meinem Fall hatte ich versehentlichng-app
in meinemhtml
Tag undng-app="myApp"
in dembody
Tag Folgendes angegeben:quelle
Das hat mich 4 STUNDEN ernst genommen (einschließlich endloser Suchanfragen auf SO), aber schließlich habe ich es gefunden: Aus Versehen (ungewollt) habe ich irgendwo ein Leerzeichen hinzugefügt.
Kannst du es erkennen?
angular.module('bwshopper.signup').controller('SignupCtrl ', SignupCtrl);
Also ... 4 Stunden später sah ich, dass es sein sollte:
angular.module('bwshopper.signup').controller('SignupCtrl', SignupCtrl);
Mit bloßem Auge kaum zu sehen.
Dies unterstreicht die entscheidende Bedeutung der Revisionskontrolle (Git oder was auch immer) und der Einheits- / Regressionstests.
quelle
Controller
stattcontroller
und das war alles was es brauchte.Ich bin auf dasselbe Problem gestoßen, und in meinem Fall ist es aufgrund dieses Problems aufgetreten:
Ich hatte die Controller in einem separaten Modul ("myApp.controllers") definiert und wie folgt in das Haupt-App-Modul ("myApp") eingefügt:
Ein Kollege hat ein anderes Controller-Modul in eine separate Datei verschoben, jedoch mit genau demselben Namen wie ich (dh 'myApp.controllers'), was diesen Fehler verursacht hat. Ich denke, weil Angular zwischen diesen Controller-Modulen verwechselt wurde. Die Fehlermeldung war jedoch nicht sehr hilfreich, um festzustellen, was falsch läuft.
quelle
In meinem Fall (mit einer Übersichtsseite und einer "Hinzufügen" -Seite) habe ich dies mit meinem Routing-Setup wie unten erhalten. Es gab die Nachricht für die AddCtrl, die nicht injiziert werden konnte ...
Aufgrund der
when('/'
Route gingen alle meine Routen in die Übersicht und der Controller konnte beim Rendern der / add route page nicht abgeglichen werden. Dies war verwirrend, weil ich die Vorlage add.html nicht gesehen habe, aber der Controller nirgends zu finden war.Das Entfernen der '/' - Route, wenn der Fall dieses Problem für mich behoben hat.
quelle
Wenn Sie sich in einem Submodul befinden, vergessen Sie nicht, das Modul in der Haupt-App zu deklarieren. dh:
Wenn Sie subModule1 in mainApp nicht deklarieren, erhalten Sie ein "[ng: areq] Argument" MyController "ist keine Funktion, wurde undefiniert.
quelle
Der zweite Punkt von Уmed war meine Falle, aber nur zur Veranschaulichung, vielleicht hilft es jemandem irgendwo:
Ich hatte das gleiche Problem und kurz bevor ich verrückt wurde, stellte ich fest, dass ich vergessen hatte, mein Controller-Skript einzuschließen.
Da meine App auf ASP.Net MVC basiert, habe ich mich entschlossen, gesund zu bleiben, indem ich das folgende Snippet in meine App_Start / BundleConfig.cs eingefügt habe
und in Layout.cshtml
Jetzt muss ich nie wieder daran denken, die Dateien manuell einzuschließen. Im Nachhinein hätte ich das wirklich tun sollen, als ich das Projekt eingerichtet habe ...
quelle
Ich habe einen vernünftigen Fehler mit LoginController bekommen, den ich in main index.html verwendet habe. Ich habe zwei Möglichkeiten zur Lösung gefunden:
Beim Setzen von $ controllerProvider.allowGlobals () habe ich diesen Kommentar in der Angular- Änderungsliste gefunden "Diese Option ist möglicherweise nützlich für die Migration alter Apps, aber bitte verwenden Sie sie nicht in neuen!" Originalkommentar zu Angular
app.config (['$ controllerProvider', Funktion ($ controllerProvider) {$ controllerProvider.allowGlobals ();}]);
falscher Konstruktor der Registriersteuerung
Vor
jetzt
'app' kommt von app.js.
quelle
Ich hatte den gleichen Fehler mit einem großen Fehler:
Siehst du? Ich habe das '' um den ersten $ Bereich vergessen, die richtige Syntax ist natürlich:
Ein erster Fehler, den ich nicht sofort sah, war: " $ scope is not defined ", gefolgt von " Error: [ng: areq] Argument 'TreeEditStepControlsCtrl' ist keine Funktion, wurde undefiniert "
quelle
Könnte es so einfach sein, Ihr Asset in "" einzuschließen und was auch immer Zitate auf der Innenseite mit '' benötigt?
wird
Dies könnte zu Problemen beim Parsen führen
quelle
Um dieses Problem zu beheben, musste ich feststellen, dass ich den Namen des Controllers in der Deklaration der Winkelrouten falsch geschrieben habe:
quelle
In meinem Fall war es ein einfacher Tippfehler in
index.html
:das hätte sein sollen
ohne das Extra
s
im Namen des Controllers.quelle
Es stellt sich heraus, dass es sich um den Cache des Browsers handelt, der hier Chrome verwendet. Überprüfen Sie einfach den "Cache deaktivieren" unter Inspizieren (Element), um mein Problem zu lösen.
quelle
Da dies in Google angezeigt wird, wenn versucht wird, eine Antwort auf folgende Frage zu finden: "Fehler: Argument '' ist keine Funktion, wurde undefiniert".
Möglicherweise versuchen Sie zweimal, dasselbe Modul zu erstellen.
Quelle: https://docs.angularjs.org/api/ng/function/angular.module#overview
Beispiel:
angular.module('myApp', [])
Wird verwendet, um ein Modul zu erstellen, ohne Abhängigkeiten einzufügen.angular.module('myApp')
(Ohne Argument) wird verwendet, um ein vorhandenes Modul abzurufen.quelle
Es scheint viele funktionierende Lösungen zu geben, die darauf hindeuten, dass der Fehler viele tatsächliche Ursachen hat .
In meinem Fall hatte ich den Controller nicht deklariert in
app/index.html
:Fehler weg.
quelle