2012-10-05 9 views
7

Oceniam AngularJS i do tej pory jestem bardzo entuzjastycznie nastawiony. Ale czegoś brakuje na froncie walidacji: dostępne opcje, takie jak built-in mechanisms i AngularUI initiative, wdrożyć weryfikatorów poprzez dyrektyw i, jako takie, każda walidacji powinny być zadeklarowane w widoku:Strategie walidacji z AngularJS

<form ng-controller="SomeController"> 
    <!-- Notice the 'required' attribute directive below: --> 
    <input type="text" ng-model="user.name" name="uName" required /> 
</form> 

W tym przykładzie, widok określa, że ​​wymagany jest user.name. To tak, jakby powiedzieć, że widok definiuje właściwy kształt modelu. Czy to nie jest trochę do tyłu? Czy widok nie powinien odzwierciedlać stanów, w tym stany błędów, gdy tak jest?

Czy się mylę? Zastanawiam się, czy możliwe jest zastosowanie jakichkolwiek walidatorów w sterowniku , sygnalizując dane modelu jako prawidłowe/nieważne, i odpowiednio aktualizując widok (formanty formularza malującego za pomocą czerwonego, pokazujące komunikaty o błędach, czyszczenie poprzednich błędów itd.). Zakładam, że AngularJS jest wystarczająco potężny, ale w dokumentach i próbkach do tej pory nie widziałem czegoś takiego, jak opisałem powyżej. Dzięki!

+0

'required' jest atrybutem HTML5. http://html5doctor.com/html5-forms-introduction-and-new-attributes/ Możesz także ustawić atrybuty 'input'' type' na takie rzeczy jak 'email, tel, date, url, number' i sprawdzą poprawność odpowiednio. –

+0

Również nigdy nie używałem AngularUI Validate, właśnie użyłem prostej metody sprawdzania AngularJS z HTML5 i działało idealnie. AngularUI Validate służy do dodawania niestandardowego sprawdzania poprawności wyrażenia do pola. –

Odpowiedz

1

Chyba wszystko zależy od perspektywy. Widzę, że definiujesz widok zawierający formularz, który zawiera dane wejściowe tekstu. To jest to wprowadzanie tekstu, które zaznaczasz jako wymagane. Jeśli zauważysz, kątowe nie obchodzi, czy tekst to user.name lub user.age lub cokolwiek innego. Właśnie kojarzy to wejście tekstowe z wymaganym. Tak więc jest to tylko sprawdzanie poprawności, że wprowadzanie tekstu i model powiązany z tym modelem są wynikiem końcowym (miejscem, w którym pojawia się wartość, jeśli weryfikacja przejdzie!).

Wystarczy popatrzeć na

http://docs.angularjs.org/guide/forms

dla walidacji formularza niestandardowego, jeśli chcesz robić walidacji, które nie są te domyślne.

Ponieważ już wiesz, widok, który jest produkowany wcześniej (pozwala wywoływać go w czasie kompilacji!), Możesz skojarzyć wszystkie weryfikatory w widoku, a tym samym nie musiałby tego robić w kontrolerze (który być może jest uruchamiany sprawdzanie czasu!).