-
נניח יש לי קומפוננטה list, המקוננת בקומפוננטה בשם ScreenList.
ה-TS של ScreenList נראה כך:public itemArr: itemModel[] = []; constructor(private dataSvc: DataService) { this.itemArr = dataSvc.getFromLocalStorage("itemArr"); }
ה-HTML של ScreenList נראה כך:
<app-ScreenList [itemArr]="itemArr" ></app-ScreenList>
ה-TS של List נראה כך:
@Input() itemArr!: itemModel[];
ה-HTML של List נראה כך:
<div *ngFor="let item of itemArr" ">{{item.value}}</div>
במילים פשוטות אני שולח מערך מקופוננטת האב, לקופוננטת הבן אשר תפקידה להציג את המערך שהתקבל.
כעת אני רוצה למחוק באמצעות קליק על כפתור בקומפוננטת הבן, איבר אחד במערך, לשם כך יש לי פונקציה ב-dataSvc שמוחקת את האיבר.
כעת בפעם הבאה שאטען את הקומפוננטה אכן לא יופיע הפריט שנמחק. השאלה כיצד ניתן לעשות שמתי שאלחץ על "מחק" הפריט יעלם באופן מיידי?
תודה רבה. -
@yyy אמר בריענון מסך באנגולר לאחר שינוי:
אני רוצה שיתרענן מידי.
לא הבנתי, הרי באנגולר השיוניים משתקפים בתצוגה מיידית.
מה שכתבת לגבי האינדקס, לא הבנתי בדיוק מה כוונתך (אני יודע שאפשר להוסיף אינדקס), אשמח אם תרחיב.
פשוט מאוד התכוונתי שבכדי להשתמש עם splice צריך לציין איזה איבר במערך למחוק, כדי לקבל את האינדקס של האיבר אמרתי לך להוסיף אינדקס.
-
@yyy השאלה שלך איננה ברורה, בהנחה וכפי שטענת שאתה יודע למחוק איבר ממערך (ולמרות זאת כתבת את השאלה), בנוסף להנחה שמחיקת האיבר מהמערך מתבצעת בקומפוננטת האב, אני חושד שההתנהגות המתוארת בשאלה היא תוצאה של הגדרת הChangeDetectionStrategy לOnPush אם כי בהתחשב בתיאור הלא ממצה של הבעיה, אין זה אלא ניחוש בעלמא.
אני ממליץ לך לשתף קוד מינימלי שמשחזר את הבעיה באמצעות Stackblitz וכדו'. -
@yyy אני חושב שהבנתי את הבעיה, ושהפיתרון של @KATZ נכון,
תראה כאן איך זה מתרענן מיד
https://stackblitz.com/edit/angular-59xiju?file=src%2Fapp%2Fapp.component.html -