Piszę przykładową aplikację przy użyciu angularjs. Wystąpił błąd wymieniony poniżej w przeglądarce Chrome.
Błąd jest
Błąd: [ng: areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined
Który renderuje się jako
Argument „ContactController” nie jest funkcją, został niezdefiniowany
Kod
<!DOCTYPE html>
<html ng-app>
<head>
<script src="../angular.min.js"></script>
<script type="text/javascript">
function ContactController($scope) {
$scope.contacts = ["[email protected]", "[email protected]"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}
</script>
</head>
<body>
<h1> modules sample </h1>
<div ng-controller="ContactController">
Email:<input type="text" ng-model="newcontact">
<button ng-click="add()">Add</button>
<h2> Contacts </h2>
<ul>
<li ng-repeat="contact in contacts"> {{contact}} </li>
</ul>
</div>
</body>
</html>
Mam ten problem, ponieważ opakowałem plik definicji kontrolera w zamknięciu:
Ale zapomniałem faktycznie wywołać to zamknięcie, aby wykonać kod definicji i faktycznie powiedzieć Javascriptowi, że mój kontroler istnieje. Tj. Powyższe musi być:
Zwróć uwagę na () na końcu.
źródło
Jestem początkującym użytkownikiem Angulara i popełniłem podstawowy błąd polegający na nieuwzględnieniu nazwy aplikacji w kątowym elemencie głównym. Tak więc zmiana kodu z
do
pracował dla mnie. @PSL, omówił to już w swojej odpowiedzi powyżej.
źródło
Wystąpił ten błąd, ponieważ nie rozumiem różnicy między
angular.module('myApp', [])
iangular.module('myApp')
.To tworzy moduł „myapp” i nadpisuje istniejący moduł o nazwie „myApp”:
angular.module('myApp', [])
Spowoduje to pobranie istniejącego modułu „myApp”:
angular.module('myApp')
Nadpisałem swój moduł w innym pliku, używając pierwszego wywołania powyżej, które utworzyło inny moduł zamiast pobierania zgodnie z oczekiwaniami.
Więcej szczegółów tutaj: https://docs.angularjs.org/guide/module
źródło
Właśnie przeprowadziłem migrację do angular 1.3.3 i odkryłem, że gdybym miał wiele kontrolerów w różnych plikach, gdy aplikacja została zastąpiona i straciłem pierwsze zadeklarowane kontenery.
Nie wiem, czy to dobra praktyka, ale może być pomocna przy innej.
źródło
Miałem ten problem, gdy przypadkowo ponownie zadeklarowałem
myApp
:Po ponownym zadeklarowaniu
Controller1
przestaje działać i podnosi błąd OP.źródło
Naprawdę świetna rada, poza tym SAMA błąd MOŻE wystąpić po prostu przez pominięcie krytycznego skryptu zawartego na stronie głównej
przykład:
strona: index.html
Brakujący
Kiedy Route zostanie poinformowany, jaki kontroler i widok ma obsługiwać:
Tak istotne, że niezdefiniowany problem z kontrolerem MOŻE wystąpić w przypadku tego przypadkowego błędu, polegającego na braku odniesienia do kontrolera!
źródło
Ten błąd może również wystąpić, gdy masz duży projekt z wieloma modułami. Upewnij się, że aplikacja (moduł) używana w pliku kątowym jest taka sama, jak w szablonie, w tym przykładzie „ thisApp ”.
app.js
index.html
źródło
Jeśli wszystko inne zawiedzie i używasz Gulp lub czegoś podobnego ... po prostu uruchom go ponownie!
Zmarnowałem 30 minut czterokrotnie sprawdzając wszystko, kiedy wszystko czego potrzebowało to szybkie kopnięcie w spodnie.
źródło
Jeśli używasz tras (wysokie prawdopodobieństwo), a Twoja konfiguracja zawiera odwołanie do kontrolera w module, który nie jest zadeklarowany jako zależność, inicjalizacja również może się nie powieść.
Zakładając na przykład, że skonfigurowałeś ngRoute dla swojej aplikacji, na przykład
Uważaj w bloku, który deklaruje trasy,
Zadeklarowanie
secondModule
jako zależności po wyrażeniu „ngRoute” powinno rozwiązać problem. Wiem, że miałem ten problem.źródło
Otrzymałem ten błąd, ponieważ używałem starszej wersji angular, która nie była zgodna z moim kodem.
źródło
Te błędy wystąpiły, w moim przypadku, poprzedzone błędami składniowymi w funkcji list.find (); metoda „find” listy nierozpoznawanej przez IE11, więc musi zostać zastąpiona metodą Filter, która działa zarówno dla IE11, jak i chrome. zobacz https://github.com/flrs/visavail/issues/19
źródło
Ten błąd, w moim przypadku, poprzedzony błędem składniowym w metodzie find listy w IE11. więc zastąpiono metodę wyszukiwania metodą filtru zgodnie z sugestią https://github.com/flrs/visavail/issues/19
to powyżej kontroler nie zdefiniowany błąd rozwiązany.
źródło
Otrzymałem ten sam błąd podczas korzystania ze starego samouczka z (nie dość starym) AngularJS 1.4.3. Zdecydowanie najprostszym rozwiązaniem jest edycja źródła angular.js z
do
i po prostu postępuj zgodnie z samouczkiem w obecnej postaci, a przestarzałe funkcje globalne działają tylko jako kontrolery.
źródło
angular.module('app') .config(['$controllerProvider', function($controllerProvider) { $controllerProvider.allowGlobals(); }]);