Mir ist aufgefallen, dass die gleiche Frage hier einige Male gestellt wurde. Ich habe versucht, sie zu lösen, aber nichts hilft.
Ich verfolge dieses Tutorial mit den Egghead-Videos.
Aber wenn ich zum Abschnitt "Controller und Datenaustausch zwischen Controllern" komme, kann ich ihn nicht zum Laufen bringen.
Wenn ich es mit Chrome ausführe, wird in der Konsole der folgende Fehler angezeigt:
'argument' FirstCtrl 'ist keine Funktion, wurde undefiniert'.
Ich weiß wirklich nicht, was los ist. Der Code ist der gleiche wie im Tutorial.
HTML
<!DOCTYPE html>
<html ng-app>
<head>
<title>AngularJS Tutorials: Controllers</title>
<link rel="stylesheet" href="mystyle.css">
<script src="http://code.angularjs.org/1.2.0-rc.2/angular.min.js"></script>
</head>
<body>
<div ng-app="">
<div ng-controller="FirstCtrl">
<h1> {{data.message + " world"}}</h1>
<div class="{{data.message}}">
Wrap me in a foundation component
</div>
</div>
</div>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
main.js
function FirstCtrl($scope){
$scope.data = { message: "Hello" };
}
javascript
angularjs
Pumba
quelle
quelle
Antworten:
Sie haben 2 unbenannte
ng-app
Anweisungen in Ihrem HTML.Verliere den in deinem Div.
Update
Versuchen wir einen anderen Ansatz.
Definieren Sie ein Modul in Ihrer js-Datei und weisen Sie ihm die
ng-app
Direktive zu. Definieren Sie danach den Controller als ng-Komponente und nicht als einfache Funktion:und der js Teil:
Hier ist eine Online-Demo, die genau das tut: http://jsfiddle.net/FssbL/1/
quelle
Ich habe genau die gleiche Fehlermeldung erhalten und in meinem Fall stellte sich heraus, dass ich die Controller-JS-Datei (z. B. first-ctrl.js) nicht in meiner index.html aufgelistet habe
quelle
Ich habe gerade dieses Tutorial gemacht und bin der Antwort von @ gion_13 gefolgt. Hat immer noch nicht funktioniert. Es wurde gelöst, indem ich meine machte Name für die ng-App im Index mit dem in meiner js-Datei identisch gemacht wurde. Genau identisch, auch die Zitate. So:
und die js:
Seltsam, wie identisch die ng-App sein muss, der ng-controller jedoch nicht.
quelle
Sie müssen Ihren Namen angeben
ng-app
und Ihrer App einen Namespace geben. einfach zu benutzenng-app
ist nicht genug .Anstatt:
Sie benötigen stattdessen so etwas:
Dann wie folgt:
quelle
Ein weiteres schönes: Module versehentlich neu definieren. Ich habe heute etwas zu eifrig Sachen kopiert / eingefügt und hatte irgendwo eine Moduldefinition, die ich mit meinen Controller-Definitionen überschrieben habe:
Dann sollte ich in meinen Definitionen so verweisen:
Was ich stattdessen tat , war:
Beachten Sie die zusätzliche Klammer im Anruf an
angular.module
.quelle
entferne ng-app = "" von
und einfach machen
quelle
Auch ich stand vor dem gleichen Problem. Das Problem war jedoch, dass ich vergessen habe, das Modul in der Liste der Module aufzulisten, von denen die ng-App abhängt.
quelle
Ich bin mit diesem Problem konfrontiert und es wurde auf folgende Weise behoben:
Entfernen Sie zuerst die ng-App aus:
füge den Namen der ng-app zu myApp hinzu:
Fügen Sie diese Codezeile vor der Funktion hinzu:
Endgültiges Aussehen des Skripts:
quelle
In meinem Fall stammt diese Nachricht aus der vergessenen Abhängigkeitsinjektion im Hauptmodul
quelle
Dies kann passieren, wenn Sie gulp falsch konfiguriert haben, um Ihren eckigen App-Code mehr als einmal hinzuzufügen. In meinem Fall war dies in index.js und es wurde als Teil des Verzeichnisses der js-Dateien (in gulp globbed) vor und nach meinen Controller-Deklarationen hinzugefügt. Nachdem ich einen Ausschluss für index.js hinzugefügt hatte, der beim zweiten Mal nicht minimiert und injiziert werden sollte, begann meine App zu funktionieren. Ein weiterer Tipp, wenn eine der oben genannten Lösungen Ihr Problem nicht angeht.
quelle
Erstens - Wenn der Modulname nicht definiert ist, können Sie im JS nicht auf das Modul zugreifen und den Controller damit verbinden.
Sie müssen den Modulnamen für das Winkelmodul angeben. Es gibt einen Unterschied bei der Verwendung des Definitionsmoduls. 1. angle.module ("firstModule", []) 2. angle.module ("firstModule")
1 - Eine besteht darin, das neue Modul "firstModule" zu deklarieren, ohne dass in den zweiten Argumenten eine Abhängigkeit hinzugefügt wird. 2 - Hiermit verwenden Sie das "firstModule", das an einer anderen Stelle initialisiert wurde, und Sie versuchen, das initialisierte Modul abzurufen und Änderungen daran vorzunehmen.
quelle
Ich war mit diesem Problem konfrontiert, konnte dieses Problem jedoch durch Umbenennen des Controllers beheben. Probieren Sie es aus.
quelle
Manchmal löst ein Fehler in der Syntax des Codes in der Funktion diesen Fehler aus. Überprüfen Sie Ihre Funktion richtig. In meinem Fall passierte es, als ich versuchte, Json-Felder mit Werten zuzuweisen und einen Doppelpunkt verwendete: um die Zuweisung anstelle des Gleichheitszeichens vorzunehmen = ...
quelle
Ich hatte zwei Controller mit demselben Namen in zwei verschiedenen Javascript-Dateien definiert. Wenn Sie diesen Winkel irritieren, kann keine klarere Fehlermeldung angezeigt werden, die auf einen Namespace-Konflikt hinweist.
quelle
Ich bin mir bei diesem Tutorial nicht sicher, aber ich hatte das gleiche Problem, als ich vergaß, die Datei in den Grunz- / Schluck-Minimierungsprozess aufzunehmen.
Hoffentlich hilft das.
quelle
Achten Sie auch auf Ihre Briefhülle. Ich habe eine gute Stunde damit verbracht, diesen Fehler zu verfolgen.
während ich den Controller benenne
Sie sollten alle konsistent benannt werden, in diesem Fall p wdController mit Kleinbuchstaben p vergessen .
quelle