RSS

AngularJS Modules

20 מרץ

אחת השאלות הנפוצות על מודולים זה ע"פ מה מגדירים את התלויות של מודול? הטעות Untitledהנפוצה היא לחשוב שאם מודול משתמש במודול אחר אז יש תלות בניהם, זה לא מדויק. למשל בשפת דוט-נט או גאווה אם אתה מכיר את ה-type אז יש תלות. כאשר מתכננים פתרון רב שכבות ונניח שי לכם את השכבות שבתמונה וכל שכבה היא מודול באנגולר. למשל המודול Controllers מכיל controllers שמכירים אוביקטים או פונקציות ממודול BL, אך זה עדיין לא מגדיר בהכרח קשר של תלות בין המודולים.

אז מה כן ?

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

1. מודולים משמשים רק את $injector ותפקידם מסתיים כאשר ה- $injector נוצר. ראו מתודה createInjector(modulesToLoad). ברגע שה- $injector נוצר כל המידע שרשמתם למודולים השונים מוחזק ב- providerCache, במבנה של אוביקטים עם שדה חובה של $get. ראו פוסטים קודמים על $injector ו- $provide. הקטע הזה בקוד מפעיל את כל מה שרשמתם לתוך המודול ומכניס את זה ל- providerCache.

2. ע"פ סעיף אחד וע"פ המבנה של moduleInstance ( זה מה שאתם מכקבלים שאתם יוצרים מודול, angular.module(name,[]) ) אנחנו מבינים שכל הרישומים שלנו לתוך המודול נשמרים ב- invokeQueue ע"פ הסדר של כתיבת הקוד שלכם חוץ מ- constant שנדחף לראש התור. טעות נפוצה מאוד זה לחשוב שמתודה config מתבצעת אחרי provider וזה לא נכון, זה תלוי בסדר הכתיבה שלכם. ( התיעוד אכן מטעה כאן ).

3. מה שאתם כותבים ב-run מתבצע רק לאחר שמרוקנים את invokeQueue של אותו מודול.

4. שמחברים את סעיפים 1-3 אנחנו מבינים שתהליך טעינה של מודול זה לרוץ על invokeQueue ואחרי זה על runBlocks, מכאן שמה שמגדיר תלות של מודול זה אם אחת הפונקציות שרשומות ב- invokeQueue או ב- runBlocks צריכה שיזריקו לה אובייקט או פונקציה ממודול אחר אז יש תלות. אבל, ויש כאן אבל גדול, אתם חייבים לזכור שכל המתודות הרישום זה למעשה עטיפה של מתודה provider ולא קוראים לפונקצי ה- $get רק עם צריך אותה בשלב ה-run ואלה (Instantiated lazily) ולכן אם למשל במתודה factory היא משתמשת בשרות ממודול אחר זה לא מגדיר תלות בין המודולים, רק אם השתמשתם ב- factory בשלב ה-run של המודול.

5. במתודה provider אי אפשר לקבל שרותים אלה רק את האוביקט עם $get בגלל שהמתודה עובדת על providerInjector ולא על $inject. כמובן שאפשר לתחמן ולהפעיל בכוח את הפונקציה של $get ואז יצרתם תלות.

 

סיכום:

כדי לחסוך בתלויות תשתמשו במתודת ה-run רק במודול המרכזי וכך אתם מבטלים את התלויות בשאר המודולים. כך אני מצליח לבנות מודול config שכולם צורכים ממנו מידע אבל אף אחד לא מגדיר תלות עליו חוץ מהמודול הראשי.

 

מי שמצליח להבין את מה שכתבתי, אשמח לתגובה . מי שלא שיבוא לקורס Angular Deep Dive   וילמד איך בונים תשתיות באנגולר.

מודעות פרסומת
 
תגובה אחת

פורסם ע"י ב- מרץ 20, 2014 ב- AngularJS

 

תגובה אחת ל-“AngularJS Modules

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

 
%d בלוגרים אהבו את זה: