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:
@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: Zrobiłem jak piszesz i błąd z "g is not a function" zniknął ale funkcja login dalej nie jest wywoływana. Na marginesie kontroler dla rejestracji mam napisany w ten sam sposób i on działa: http://pastebin.com/6XTj9yHN
@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
@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ć.
@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 ;)
Każdy facet z którym byłam kupował mi kwiaty i zapraszał do restauracji , nigdy nie pozwalał wracać samej w nocy więc nigdy nie zejdę poniżej tego MINIMUM bo mniej już się zrobić nie da a jeśli facet nie robi nawet tego to menel nie facet którego można rozważyć #przegryw #p0lka
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
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
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
Ok więc tego u Ciebie brakowało.
Polecam do poczytania (chyba że idziesz z jakimś tutorialem):
https://docs.angularjs.org/tutorial/step_07 sekcja The App Module
Możesz definiować routing w którym do każdego widoku określasz jaki kontroler ma być używany.
Teraz wystarczy, że przeniosę funkcję Login do MainController i będzie działać.
Dzięki za pomoc :)
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 ;)