Wpis z mikrobloga

Siema, w wolnej chwili zacząłem przyglądać się bliżej JS, głównie do robienia back-endu, ale po napisaniu serwera http, api dla mongodb i serwisu powiadomień chciałem zrobić do tego UI i położył mnie angular. W skrócie:

Jest forma do podania nazwy użytkownika i hasła: http://pastebin.com/Y5haVqCx

Jest kontroler z metodą login: http://pastebin.com/6qqVqdKv

Niestety metoda nie jest nigdy wywoływana. Podobnie mam zrobiony formularz rejestracji i śmiga.

No i jeszcze linki do plików .js http://pastebin.com/XeAqcGGH (wiem powinienem użyć Gulpa).

Jakieś sugestie?

UPDATE: teraz dostaję takie coś: TypeError: g is not a function

#programowanie #javascript #angularjs
  • 11
@markaron: Przede wszystkim zobacz co masz w HTMLce

Według Twojego kodu login to funkcja i zarazem obiekt.

Do ng-model przypisujesz np. login.username zaś w kodzie JS masz $scope.login jako funkcje.

Nie powinno się tak robić.

Spróbuj tak
1) Zostaw login w ng-model
2) w ng-submit wpisz loginFunc()
3) A potem w ciele funkcji w kontrolerze *.js masz dostęp do obiektu login poprzez $scope.login i nie musisz ich przekazywać w parametrze w
@Dyktus: Ok, udało mi się wywołać tę metodę poprzez dodanie do znacznika body ng-controller="LoginController". O ile rozumiem skąd to się bierze (znam MVC z Javy i .net) o tyle nie rozumiem dlaczego nie musiałem podawać w ten sposób kontrolera do rejestracji (RegistrationController).

Być może chodzi o to, że formularz logowania znajduje się na stronie głównej, a formularz rejestracji do widok wstrzykiwany do diva w taki sposób: http://pastebin.com/aeBGRU34

A w app.js nie
@Dyktus: Dzięki za link przypomniał mi, że mam zdefiniowany routing dla każdego widoku. Po prostu zapomniałem o routingach i że dla "/" używany jest MainController, więc LoginController nie mógł być nigdy użyty z automatu. Jedynym wyjściem by zadział było na sztywno wpisanie go do dyrektywy ng-controller :D

Teraz wystarczy, że przeniosę funkcję Login do MainController i będzie działać.

Dzięki za pomoc :)
@markaron: Albo dla widoku /login zdefiniuj w app.js odpowiedni kontroler czyli LoginController.

Bo to co piszesz czyli przeniesienie funkcji z jednego kontrolera do drugiego nie rozwiązuje sprawy. Nie możesz trzymać przecież całego kodu w jednym kontrolerze ;)