To jest moje demo używające angularjs do tworzenia pliku usługi i dodawania usługi do kontrolera.
Mam dwa problemy z moim demo:
- Po pierwsze, wstawiam,
<script src="HomeController.js">
zanim<script src="MyService.js">
pojawi się ten błąd,
Błąd: [ng: areq] Argument „HomeController” nie jest funkcją, został niezdefiniowany
- Drugi jest, gdy wstawiam,
<script src="MyService.js">
zanim<script src="HomeController.js">
otrzymam następujący błąd,
Błąd: [$ injector: unpr] Nieznany dostawca: MyServiceProvider <- MyService
Moje źródło:
Plik Index.html
:
<!DOCTYPE html>
<html >
<head lang="en">…</head>
<body ng-app="myApp">
…
<div ng-controller="HomeController">
<div ng-repeat="item in hello">{{item.id + item.name}}</div>
</div>
<script src="Scripts/angular.js"></script>
<script src="Scripts/angular-route.js"></script>
<!-- App libs -->
<script src="app/app.js"></script>
<script src="app/services/MyService.js"></script>
<script src="app/controllers/HomeController.js"></script>
</body>
</html>
Plik HomeController.js
:
(function(angular){
'use strict';
var myApp = angular.module('myApp',[]);
myApp.controller('HomeController',function($scope,MyService){
$scope.hello=[];
$scope.hello = MyService.getHello();
});
})(window.angular);
Plik MyService.js
:
(function(angular){
'use strict';
var myApp = angular.module('myApp',[]);
myApp.service('MyService', function () {
var hello =[ {id:1,name:'cuong'},
{id:2,name:'nguyen'}];
this.getHello = function(){
return hello;
};
});
})(window.angular);
javascript
angularjs
angularjs-service
Cuong.Ho
źródło
źródło
Odpowiedzi:
Spowoduje to utworzenie nowego modułu / aplikacji:
Podczas gdy to uzyskuje dostęp do już utworzonego modułu ( zwróć uwagę na pominięcie drugiego argumentu ):
Ponieważ używasz pierwszego podejścia w obu skryptach, w zasadzie nadpisujesz moduł, który wcześniej utworzyłeś.
Przy drugim ładowanym skrypcie użyj
var myApp = angular.module('myApp');
.źródło
Raz doświadczyłem tego błędu. Mój problem polegał na tym, że nie dodawałem FILE_NAME_WHERE_IS_MY_FUNCTION.js
więc mój plik.html nigdy nie znalazł miejsca, w którym była moja funkcja
źródło
Upewnij się również, że kontrolery są zdefiniowane w znacznikach script w dolnej części pliku index.html, tuż przed zamykającym tagiem body.
pod warunkiem, że wszystko jest napisane „poprawnie” (to samo) na stronach specific.html, specific.js i app.js, powinno to rozwiązać problem.
źródło
Zdarzyło mi się kilka razy za każdym razem, gdy tęsknię za „” między listą zastrzyków i funkcją
źródło
app.controller('commonCtrl' ['$scope', '$filter',function($scope,$filter) { }]);
Również doświadczyłem tego błędu, ale w moim przypadku był to skutek konwencji nazewnictwa kontrolerów. Oświadczyłem
controller: "QuestionController"
się.state
jednak w definicji kontrolera oświadczyłem to podobaale tak powinno być
Mam nadzieję, że pomoże to ludziom borykającym się z tym błędem z powodu tego głupiego błędu, który zmarnowałem 4 godziny na jego identyfikację.
źródło
Mam ten sam błąd. Zdefiniowałem skrypt java w ten sposób
potem zmieniłem na to
Po tym mój problem został rozwiązany.
źródło
Napotkałem również ten sam błąd i rozwiązaniem dla mnie było włączenie mojego modułu podrzędnego do głównej tablicy modułów.
źródło
Jeśli ALL ELSE zawiedzie i biegasz lokalnie na stosie MEAN jak ja z łykiem ... po prostu zatrzymaj się i serwuj ponownie! Skrupulatnie sprawdzałem wszystko, od wszystkich twoich postów, bezskutecznie, dopóki po prostu nie powtórzyłem podania łyka.
źródło
Miałem podobny problem. Poprawka polegała na zapewnieniu, że kontrolery kontrolne są nie tylko zdefiniowane w znacznikach skryptów u dołu pliku index.html tuż przed tagiem zamykającym dla body, ale także sprawdzenie, czy są one w kolejności zgodnej ze strukturą folderu.
źródło
Z tym problemem spotkałem się również w swoim projekcie. W końcu zadziałało po tym, jak wstawiłem tag
my-controller.js
do mojegokarma.conf.js
pliku<script>
.Mam nadzieję, że to pomoże. Istnieje wiele przyczyn, które mogą prowadzić do tego problemu.
źródło
Mam też ten błąd.
Musiałem dodać mój nowy kontroler do informacji o routingu. \ src \ js \ app.js
Dodałem kontroler, żeby wyglądał
Twoje zdrowie!
źródło
Oczywiście poprzednie posty są przydatne, ale żadne z powyższych nie są pomocne w moim przypadku. Przyczyną była zła kolejność ładowania skryptów . Na przykład w moim przypadku kontroler editCtrl.js zależy od (używa) ui-bootstrap-tpls.js, więc powinien zostać załadowany jako pierwszy. To spowodowało błąd:
To prawda, działa:
Aby więc naprawić błąd, musisz najpierw zadeklarować wszystkie skrypty bez zależności , a następnie skrypty zależne od wcześniej zadeklarowanych.
źródło
Spróbuj tego
źródło
W moim przypadku brakowało mi nazwy aplikacji Angular w pliku html. Na przykład, dołączyłem ten plik jako początek kodu mojej aplikacji. Założyłem, że jest uruchomiony, ale tak nie było.
app.module.js
Jednak kiedy zadeklarowałem aplikację w html, miałem to:
index.html
Aby jednak odwołać się do aplikacji Angular za pomocą nazwy, której użyłem, musiałem użyć:
index.html (naprawiony)
źródło
Otrzymałem błąd, ponieważ dodałem skrypt kontrolera przed skryptem, w którym zdefiniowałem odpowiedni moduł w aplikacji. Najpierw dodaj skrypt
Następnie tylko dodaj
W głównym pliku.
źródło
Błąd: ng: areq Zły argument dotarł do mnie kilka razy, ponieważ zbyt wcześnie zamykam nawias kwadratowy. W poniższym złym przykładzie jest ona zamykana niepoprawnie po '$ state', podczas gdy w rzeczywistości powinna znajdować się przed ostatnim nawiasem.
ZŁY:
DOBRY:
źródło
Tak. Jak wielu już wcześniej zauważyło, dodałem ścieżkę src do wszystkich plików kontrolera w pliku index.html.
To naprawiło ten błąd.
źródło
Miałem ten sam problem, ale zapomniałem włączyć plik do procesu minimalizacji grunt / gulp.
Mam nadzieję, że to pomoże.
źródło
W mojej sytuacji ten błąd pojawił się, gdy nie zadeklarowałem funkcji w argumencie tablicy.
Ten z błędem :
Naprawiono:
źródło
Sprawdź także błędy w pisowni .
źródło
Sprawdź, czy Twoja strona HTML zawiera:
angular.min
scenariuszapp.js
Kolejność dołączania plików jest ważna. To było moje rozwiązanie tego problemu.
Mam nadzieję że to pomoże.
źródło
Dla mnie to samo, przecinek ',', zanim funkcja pomogła mi w naprawieniu problemu - Error: ng: areq Bad Argument
źródło
Mój plik kontrolera został zapisany w pamięci podręcznej jako pusty. Wyczyszczenie pamięci podręcznej naprawiło to za mnie.
źródło
Przypadkowo przeniosłem HomeController.js bezpośrednio z miejsca, w którym był oczekiwany. Umieszczenie go ponownie w pierwotnym miejscu.
Po tym czasie moja witryna zaczęła automatycznie ładować strony co sekundę, nie byłem nawet w stanie spojrzeć na błąd. Więc wyczyściłem pamięć podręczną przeglądarki. To rozwiązało problem
źródło