PracticU

Async Custom Validators

בלי כתוביותעם כתוביות
PracticU › קורס אנגולר 4 עם Angular - WebAPI › Async Custom Validators
מילון מושגים:
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
טופס - אזור בממשק שבו המשתמש מזין נתונים בשדות ושולח אותם, למשל טופס הרשמה או התחברות.
API - ממשק תכנותי שמגדיר כיצד תוכנה אחת פונה לאחרת ומחליפה איתה נתונים ופעולות.
JSON - פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.
HTTP - פרוטוקול להעברת דפי אינטרנט ונתונים בין דפדפן לשרת. הגרסה המאובטחת שלו היא HTTPS.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.
לוג - רישום מתועד של אירועים ופעולות שמתרחשים במערכת או בתוכנה, המשמש למעקב ולאיתור תקלות.
תבנית - מבנה בסיסי מוכן שממנו יוצרים פריטים דומים, כמו תבנית עמוד או תבנית מסמך.

Async Custom Validators
בדיקה מול השרת, למשל האם אימייל כבר תפוס, יכולה לקחת זמן. בהרצאה הזאת כותבים ולידטור אסינכרוני שמחזיר Observable, כך שהטופס ממשיך לעבוד בזמן שממתינים לתשובה, והשגיאה מופיעה כשהתשובה מגיעה.
השלבים העיקריים
1. חתימה של ולידטור אסינכרוני: הפונקציה מקבלת AbstractControl ומחזירה Observable של ValidationErrors או null. את החתימה מעתיקים מההגדרה של הטיפוס AsyncValidatorFn, בעזרת go to definition.
2. נתונים לדוגמה: במקום Web API ומסד נתונים יוצרים קובץ JSON עם רשימת משתמשים, שלכל אחד יש שם ואימייל. כך אפשר להתמקד בלוגיקה.
3. סרוויס לבדיקה: יוצרים סרוויס שמשתמש ב-HTTP כדי לקרוא את הקובץ. הפונקציה emailNotTaken מקבלת מחרוזת ומסננת את הרשומות לפי האימייל. אם לא נמצא כלום מחזירים null, ואם נמצא מחזירים את אובייקט השגיאה.
4. השהיה מדומה: כדי לדמות שרת איטי מוסיפים delay של שלוש שניות לפני הסינון. אפשר לבדוק את הזרם בכל שלב בעזרת do ו-console.log.
5. חיבור לוולידטור: הוולידטור מקבל את הקונטרול, לוקח את הערך שלו ומעביר לסרוויס. הוא מחזיר את ה-Observable שהסרוויס החזיר.
6. הזרקה והרשמה: הסרוויס מוזרק לקומפוננטה, ונרשם ב-providers של המודול.
שימו לב
- הסרוויס לא נגיש בתוך הוולידטור כפי שהוא, כי הוולידטור נקרא מחוץ לעולם הקומפוננטה. הפתרון: פונקציה חיצונית (factory) שמקבלת את הסרוויס פעם אחת בזמן האתחול ומחזירה את הוולידטור הפנימי.
- מפתח השגיאה של האימייל התפוס מוסיף הודעה לתבנית באותה דרך שבה מוסיפים הודעות של ולידטור מובנה.
בסיום הטופס בודק את האימייל מול השרת בלי לעצור את המשתמש בזמן ההמתנה.
השיעור הבא בקורס: Reactive Forms - Error Messages

פרקי ההרצאה: Async Custom Validators

  1. 00:00

    מטרת הוולידציה האסינכרונית מול השרת

  2. 00:37

    חתימת פונקציית ולידטור אסינכרונית

  3. 02:08

    החזרת Observable של שגיאות ולידציה

  4. 03:02

    הדמיית תשובת שרת עם קובץ JSON

  5. 03:52

    סרוויס לבדיקת אימייל תפוס

  6. 04:43

    עיכוב התשובה ופילטור היוזרים

  7. 05:35

    המרת התוצאה לשגיאת ולידציה

תמלול ההרצאה: Async Custom Validators

הטקסט המלא של הדקות הראשונות בהרצאה «Async Custom Validators» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    טוב חברים, אנחנו מוכנים להרצאה על ולידאטו אסינכרוני אנחנו רוצים שיהיה לנו בדיקה מול השרת האם האימייל שלנו כבר תפוס או לא למה זה אסינכרוני? כי אני לא רוצה לעכב את הבן אדם בעבודה השוטפת שלו שהטופס יעבוד וכשתגיע התשובה אז יתעדכן הטופס בהתאם אבל שהוא לא יתקע את העבודה השוטפת עד שהוא

  2. 00:23

    מחכה לתשובה מהשרת כי זה יכול לקחת כמה שניות ויכול להיות שהשרת תקוע אז איך אנחנו עושים אסינכרוניק ולידאטו?

  3. 00:30

    אז אנחנו רואים פה שאנחנו צריכים להעביר לו asynchronic validator function. השאלה איך אנחנו נבנה אותה, אז בואו נתחיל מזה שפשוט נלך לראות מה החתימה שלה ונבנה אותה.

  4. 00:42

    אז קודם כל אני אקרא לה בשם כזה, email validator from server, וכאן השאלה זה מה היא צריכה לקבל, מה היא צריכה להחזיר, מה הולך להיות כאן.

  5. 00:51

    אתם רואים, הוא כבר אומר לי שהיא צריכה לקבל משהו לא ברור, אני הולך על form control, לוחץ go to definition על form control הזה, ורואה שפורום קונטרול מקבל פורום סטייל שזה הדיפולט שלו פסיק ולידטור מסוג או ולידטור פאנקשן או נאל זה בעצם החלק השני והחלק השלישי זה אסינכרוניק ולידטור שהוא לא חובה זה אומר זה המשתנה הפנימי שלו ככה הוא קורה לו

  6. 01:16

    בפנים שהוא לא רכיב חובה בגלל שיש פה סימן שאלה והוא מסוג אסינכרוניק פאנקשן או אוסף של אסינכרוניק פאנקשן או נאלס עד היום העברנו לו כל הזמן נאלים אה זה למעשה מה הוא מחזיר כן איזה סוג הוא בעצם יכול להיות או פאנקשן או זה.

  7. 01:30

    עכשיו אני הולך לכאן ועושה F12 ורואה שאסינכרוניק פאנקשן צריך לקבל את הקונטרולר ולהחזיר פרומיס או אבזורבבל של ולידיישן ארורס.

  8. 01:42

    אז זה מה שהוא צריך לקבל, יופי, והוא צריך להחזיר או פרומיס או נעל או אבזורבבל של ולידיישן ארורס. אני עובד עם אבזורבבל. למה? כי זה יום אחד תגיע התשובה של ולידיישן ארורס עם הודעות שגיאה ככה.

  9. 01:56

    או Observable של Validation Errors או Null, הנה בוא נעשה לו Return Null רק כדי שלא אתריע לי סתם ויש לנו פה חתימה מוכנה מה שעשיתי עוד פעם כתבתי פה את הפונקציה שלי וזה השם שלה כאן איך ידעתי מה היא צריכה לקבל הלכתי ל-F12 כאן ראיתי מה הוא מקבל וראיתי פה הסינכרוניק

  10. 02:16

    פאנקשן שזה בעצם הפרמטר השלישי הלכתי לסינכרוניק פאנקשן ופה ראיתי שהוא צריך לקבל Abstract Control ולהחזיר אחרי נקודתיים זה מה שהוא מחזיר אובזורבאבל של או ולידיישן אירורס או נעל פרומיס זה למעשה אובזורבאבל יותר פשוט יופי אז יש לנו ולידיישן אירורס אנחנו כבר מכירים זה למעשה הודעות השגיאה הרגילות שראינו זה ה-K והסטרינג למעשה

  11. 02:39

    אנחנו מחזירים כמו שהחזרנו לפני כן ולידיישן אירורס רק עכשיו אנחנו מחזירים אותם באובזורבאבל זה כל ההבדל יופי אז בוא נעשה סרוויס שמתחבר לשרת ומעביר לי את האובזורבאבל של ולידיישן אירורס ואנחנו נפעיל את זה עם סרוויס אז את החלק הזה עשינו עכשיו אנחנו הולכים לצד של שרת ככה דבר ראשון אני רוצה לזייף לו תשובה מהשרת כדי לא להסתבך עם Web API ולא

  12. 03:03

    להסתבך עם לעשות טבלה בדאטה בייס ואני לא רוצה עכשיו צד שרת לטפל בו אז אני עושה בעצם קובץ ג'ייסון שידמה לי תשובה מהשרת ג'ייסון פייר נקרא לו יוזרס איך לקבל תשובה באמת מהשרת אתם כבר יודעים אז אני לא אעשה את זה עוד פעם כי את זה כבר למדנו ועשינו כמו שצריך אז יש לי פה בעצם מערך ובתוך המערך כאילו יש לי אובייקטים אחד אחרי השני,

  13. 03:27

    כל אובייקט יש לו מאפיין name ו-email, name ו-email, בסדר? זה כאילו השר"ט החזיר לי ג'ייסון כזה עם מאפיינים כאלו, זה יותר דומה אפילו ל-XMN. טוב, עכשיו אנחנו רוצים לבנות סרוויץ, אז אני אלך לסרוויץ ואני אעשה קובץ חדש, סרוויץ חדש בשם E-Mail ולידתור סרוויץ.

  14. 03:50

    יופי, עשינו סרוויץ חדש, עכשיו אני עושה snippet, NG2 Services, נותן לו שם, ומה שאני רוצה ככה שהסרוויס הזה קודם כל יעשה HTTP, ישתמש ב-HTTP כאילו זה אמיתי ועושים אימפורט ואני עושה פה פונקציה של Emails Not Taken שיבדוק

  15. 04:07

    את זה והפונקציה הזאת תקבל E-Mail to check, E-Mail לבדיקה מסוג סטרינג, סתם טקסט ותחזיר לי, מה היא תחזיר לי? את מה שאני רוצה לקבל פה, את Observables של Error on Null.

  16. 04:19

    אז למעשה יש לי סרוויס שיחזיר לי תשובה ואני אחזיר אותו חזרה לכאן. זה כל הסיפור. למעשה אני מעביר את כל העבודה לסרוויס חיצוני שיתחבר לשרת ויוציא לי את האימייל הזה. למה אני עושה את זה עם סרוויס חיצוני? כי לך תדע באיזה קומפוננטות אני עוד ארצה את זה. בואו נעשה את זה בשלבים.

  17. 04:36

    נעשה משתנה עזר Observable 1 שמה שהוא עושה הוא עושה this HTTP.get מתוך הקובץ שימו לב ה-HTTP.get מתוך הקובץ זה Observable הראשון מה עושה Observable השני הוא מקבל מה-Abservable הראשון לדוגמה delay שלוש שניות בוא נעשה את זה שלוש שניות תראו שזה עובד עכשיו אני יכול לעשות עוד פעם לד אובזרבאבל שלוש ולהגיד לו מאובזרבאבל השני

  18. 05:01

    אחרי הדיליי תיקח מאפ ותעשה לו ג'ייסון חברה אנחנו כבר ראינו את זה נכון את כל זה ואני יכול גם לחבר אותם שהם לא יהיו אחד אחרי השני אלא פשוט לחבר אותם את זה הראתי לכם לקחת את זה ולחבר את זה זה אותו דבר מקווה שאתם כבר יודעים ולא מפחדים מזה יפה מאוד אז אחרי שלקחתי ג'ייסון עיכבתי אותו בשלוש שניות אחרי שלקחתי לו את הג'ייסון עכשיו אני רוצה לעשות

  19. 05:23

    פילטר מה זה פילטר? אני עובר על כל הרשומות של ג'ייסון ועבור כל יוזר בודק האם אימייל שלו זה מה שאני מחפש.

  20. 05:33

    אחרי שאני בדקתי וחזר לי החוצה רק את אלו שחיפשתי, רק את האימיילים הנכונים, אני בודק האם התשובה, בוא נעשה לזה תשובה, האורך שלה שווה 0. האורך של התשובה שווה 0, אז זה למעשה רשימת היוזרים.

  21. 05:47

    האם רשימת היוזרים שווה ל-0? אם כן, זה הופך להיות לבוליאן, true או false. אז עכשיו יש לי true או false, ועכשיו אחרי שיש לי true או false, אני יכול להחזיר תשובה נקודה map אז אני אומר לו דבר כזה שיקח את התשובה הזאת שהיא true או false ואם היא true זה אומר שהוא 0 אז תחזיר לי null ואם הוא false אז תחזיר לי אובייקט אימייל

  22. 06:08

    סטייקן וtrue יש אני מחזיר או null או אובייקט האובייקט הזה זה זה אני יכול לעשות לו אפילו קאסטינג אם אתם רוצים אז אני לוקח את האובייקט עושה לו קאסטינג בלידי שנערורס ומחזיר חזרה את הדבר הזה ונשאר לנו

לקורס המלא: קורס אנגולר 4 אונליין עם WebAPI

ההרצאה הקודמת: Custom Validators With Parameter

ההרצאה הבאה: Reactive Forms - Error Messages

הרצאות קשורות מקורסים אחרים

  • Custom Toast
  • Asynchronous - Async Call
  • שימוש ב-Async Controller
  • הסבר על Custom Dialogs

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React