מה הם קומפוננטות
קומפוננטה היא הרכיב הכי בסיסי בתוכנית אנגולר. תוכנית אנגולר בנויה כמו משחק לגו, יש לנו אבני בנין ומהם אנחנו יכולים לבנות כל מיני מבנים שונים.
יש לנו את קומפוננטת הבסיס, שתופיע כשהאפליקציה שלנו תעלה, וממנה אנחנו ממשיכים לקרוא ולהעלות את שאר הקומפוננטות.
בפשטות, קומפוננטה היא קובץ Html שמכיל קוד לאיך אנחנו רוצים להציג את המידע שלנו על המסך, וקובץ ts שמכיל את הלוגיקה של מה שאנחנו רוצים להציג.
כל component מכיל:
Template
שזה קוד ה-HTML שמוצג על המסך.
Class
הקוד שעושה שכל מאחורי התצוגה.
Metadata
הגדרות של הקומפוננטה.
יצירת component
ng g c comp-name
העברת מידע מה-class ל-template
בתוך קובץ ה-ts ששם נמצא ה-class אנחנו מגדירים משתנים שזמינים לנו בתצוגה של הקומפוננטה - Properties.
כאן אנחנו מחברים את ה-id של ה-input ונותנים לו את המשתנה myId שהגיע מה-class.
<input [id]="myId" type="text">
הקוד הבא עושה בדיוק אותו הדבר עם שימוש בכתיב ה"שפם".
<input id={{ myId }} type="text">
שימוש מותנה בעיצוב
אפשר להתנות הופעה של class של css על ידי שימוש במשתנה בוליאני שמגיע מתוך קובץ ה-ts. נניח שיש לי שגיאה ואני רוצה לשנות את העיצוב של הרכיב כשהיא מופיעה.
בקובץ ה-ts אני אתן ערך של true למשתנה hasErrors ואז:
<h2 [class.text-danger]="hasErrors">
ה-class שנקרא text-danger יופיע רק במידה והערך של hasErrors יהיה חיובי.
עיצוב מותנה של כמה classes - שימוש ב-ngClass
public hasErrors = false;
public messageClasses = {
"text-success": !this.hasErrors,
"text-danger": this.hasErrors
}
<h2 [ngClass]="messageClasses"></h2>
הקוד בודק איזה classes מקבלים את הערך true ומצמיד אותם לרכיב שבו מופיע המשתנה messageClasses.
<div class="search-div" [ngClass]="{changeBackground: searchValue != ''}"></div>
כאן, במקרה שמחרוזת החיפוש לא ריקה, יופיע ה-class של changeBackground.
שימוש מותנה ב-style
<h2 [style.color]="hasErrors ? 'red' : 'green' "></h2>
כאן במקרה במשתנה hasErrors הוא true הערך של color יהיה red. אחרת הערך ש-color יקבל יהיה green.
שימוש ב-ngStyle
public titleStyles = {
color: "blue",
fontStyle: "italic"
}
בתוך קובץ התצוגה נשתמש ב-styles שהגדרנו.
<h2 [ngStyle]="titleStyle"></h2>
בהגדרת משתני ה-style בתוך קובץ ה-ts משתמשים בכתיב CamelCase ולא במקף בהפרדה בין המילים. fontStyle ולא font-style.