ABA


"שאלה לגבי שימוש בService בקוד בAngular וTS"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #21577 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 21577
Gman
חבר מתאריך 31.3.02
1846 הודעות
   13:56   26.01.16   
אל הפורום  
  שאלה לגבי שימוש בService בקוד בAngular וTS  
 
   ערכתי לאחרונה בתאריך 26.01.16 בשעה 13:59 בברכה, Gman
 
היי

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

הנה הקוד שלי לעמוד ולController של רשימת משימות.
אני מעביר בConstructor שירות בשם TaskService שאני כתבתי ודרכו מביא ומעדכן את רשימת המשימות.

העניין הוא כזה, בפעולת Add - כשאני פונה ל this.service - הוא חוזר undefined. כלומר ריק - אני מניח שהסיבה לכך היא שהthis שלי השתנה, כבר הבנתי וקיבלתי את הרושם שthis הוא מושג די אמורפי בJS.

אז, איך אני מקבל רפרנס לService בConstructor ומשתמש בו בשלב מאוחר יותר?

הנה הקוד:
https://jsfiddle.net/GuyKhmel/au64bshx/


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תעלה את כל הקבצים... aCoZz  28.01.16 00:25 1
     קיבלתי תשובה ממישהו Gman 28.01.16 00:40 2
         מוזר, יוחאי 28.01.16 07:46 3
         תעלה פשוט את כל הקוד איך אתה רוצה שנעזור לך ככה ? aCoZz  28.01.16 20:39 4
         כן ברור אתה צריך לשים ctrl לפני בדרך כלל קוראים לזה vm אבל לא קרטי aCoZz  28.01.16 20:49 5
             אתמול בדיוק הייתי חייב ללכת אבל אני אסביר לך למה אנחנו צריכים את זה עכשיו aCoZz  29.01.16 13:03 6
                 השכלתי. תודה! Gman 01.02.16 15:50 7
                 הסבר מדויק! :) אגב ב- 1.5 יש לך את BindToController ששם יש רק Controller sharkk 20.02.16 11:20 8
                 הסיבה העיקרית ל CONTROLLER AS VeNom  20.02.16 17:26 9
                     אמת :) + Avoid Scope Soup! :( sharkk 21.02.16 21:47 10
                     כן ולא... כאחד שכבר התנסה בכתיבה של אנגולר 2 aCoZz  22.02.16 00:24 11

       
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   00:25   28.01.16   
אל הפורום  
  1. תעלה את כל הקבצים...  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Gman
חבר מתאריך 31.3.02
1846 הודעות
   00:40   28.01.16   
אל הפורום  
  2. קיבלתי תשובה ממישהו  
בתגובה להודעה מספר 1
 
   האמת, די מעניינת.

הוא הציע שבמקום לכתוב



ng-click="add()"


אני אכתוב עם הפניה לController
כלומר,

ng-click="ctrl.add()"

וכך אשמור על הקונטקסט ואוכל להשתמש בתוך הפונק' בקונטרולר
למשל ב:



this.tasksService.addOrUpdate(...)


שהעברתי בבנאי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   07:46   28.01.16   
אל הפורום  
  3. מוזר,  
בתגובה להודעה מספר 2
 
   מצד שני גם יכולת להשתמש ב-bind עם ה-controller וזה היה עובד, הרי ברגע שאתה משתמש ב-ng-controller על scope מסויים של html ה-context שלך צריך להיות הקונטרולר מה ההיגיון לתת context לא ברור.

אשמח אם למישהו יש תשובה הגיונית.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   20:39   28.01.16   
אל הפורום  
  4. תעלה פשוט את כל הקוד איך אתה רוצה שנעזור לך ככה ?  
בתגובה להודעה מספר 2
 
   ערכתי לאחרונה בתאריך 28.01.16 בשעה 20:45 בברכה, aCoZz
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   20:49   28.01.16   
אל הפורום  
  5. כן ברור אתה צריך לשים ctrl לפני בדרך כלל קוראים לזה vm אבל לא קרטי  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   13:03   29.01.16   
אל הפורום  
  6. אתמול בדיוק הייתי חייב ללכת אבל אני אסביר לך למה אנחנו צריכים את זה עכשיו  
בתגובה להודעה מספר 5
 
   ערכתי לאחרונה בתאריך 29.01.16 בשעה 13:07 בברכה, aCoZz
 
מה שקורה פה זה דבר כזה
בגרסאות הראשונות לא היית יכול לשים
ng-controller="TasksIndexController as ctrl"

הייתה צריך לשים

ng-controller="TasksIndexController"

עכשיו יש פה בעיה !
אם אתה מכונן קונטרולרים
אתה יוצר ירושה ,קונטרולר "בן" יורש מקונטרולר "אבא"

עכשיו מה שקורה פה זה דבר כזה נגיד יש לך בקונטרולר אבא משתנה על הסקופ נגיד NAME
כלומר $scope.NAME

ואתה רוצה להשתמש ב NAME בקונטרולר בן
אז יש ירושה.. אבל אסור להתבלבל כי ב JS זאת לא ירושה רגילה מדובר פה ב prototype inheritance

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

איך פותרים את זה ?
שמים באבא OBJECT TYPE לדוגמא VM ושמים עליו ועליו שמים NAME
ואז בתוך הבן אנחנו גורמים לשינוי של ה VM ולא המשתנים בסקופ
מה שקורה פה בגלל שאנחנו לא משנים את הפוינטר לאוביקט VM אנחנו מדברים על אותו אוביקט תמיד !
וככה פותרים את בעיית הסנכרון.

לסיכום במקום שכל פעם תיצור אוביקט בתוך הסקופ שלך אנגולר הוסיפו
CONTROLLER AS
והם יוצרים לך את ההאוביקט VM מאחורי הקלעים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Gman
חבר מתאריך 31.3.02
1846 הודעות
   15:50   01.02.16   
אל הפורום  
  7. השכלתי. תודה!  
בתגובה להודעה מספר 6
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sharkk
חבר מתאריך 2.9.02
1306 הודעות
   11:20   20.02.16   
אל הפורום  
  8. הסבר מדויק! :) אגב ב- 1.5 יש לך את BindToController ששם יש רק Controller  
בתגובה להודעה מספר 6
 
   בלי כל ענייני הטעינה של pre, post link.

והם נותנים לך את כל ה- goodies הזה חינם, אז רצוי לעבור ל- 1.5


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   17:26   20.02.16   
אל הפורום  
  9. הסיבה העיקרית ל CONTROLLER AS  
בתגובה להודעה מספר 6
 
   היא דווקא להוריד את התלות בפריימוורק.

פעם היית צמוד ל $scope והיום אתה כותב פונקציה עם this מה שמאפשר לך פחות לכתוב קומפוננטות "לאנגולר בלבד" ובעיקר כדי שיהיה לך קל יותר לעבור לאנגולר 2 (בהנחה ואתה כותב את הקומפונטטות שלך בצורה נכונה).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sharkk
חבר מתאריך 2.9.02
1306 הודעות
   21:47   21.02.16   
אל הפורום  
  10. אמת :) + Avoid Scope Soup! :(  
בתגובה להודעה מספר 9
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
aCoZz 
חבר מתאריך 19.7.06
17692 הודעות
   00:24   22.02.16   
אל הפורום  
  11. כן ולא... כאחד שכבר התנסה בכתיבה של אנגולר 2  
בתגובה להודעה מספר 9
 
   ערכתי לאחרונה בתאריך 22.02.16 בשעה 00:28 בברכה, aCoZz
 
אני חייב להגיד שהמעבר קל אם לא התשמשת באינג'קטור במיוחד לסרבסים של אנגולר
אם כן הרווחת תעתיק את הקלאס לאנגולר 2
אם השתמשת בסרבסים של אנגולר 1 דיי אכלת אותה
כי הקונספט שונה לגמרי במיוחד האינג'קטור, אנחנו כבר לא מדבר על סרבסים שהם סינגלטון יש היררכיות ואפשר להזריק את הסרביס כמה פעמים ברמות שונות של עץ האפליקציה
ובמיוחד השינוי הגדול הורדה של הספוק ומעבר לשיטה יותר אובג'קט אורינתד של מימוש אינטרפיס מתאים כדי להאזין לשינוים של המשתנים
או מימוש אינטרפיס מתאים כדי להחליף את הקומפיל/לינק

בקיצור המעבר אף פעם לא היה בלי שינוים.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net