קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ HTML ♦ אנגולר Rxjs – BehaviorSubject in Service file

אנגולר Rxjs – BehaviorSubject in Service file

עידן יצחקי 6 בנובמבר 2020 אין תגובות

בספרית rxjs יש מספר סוגים של subject , כל אחד והיעוד שלו (והיתרון שלו).

הפעם אנחנו נראה איך להשתמש ב-behaviorSubject בקובץ service.

היתרון של behaviorSubject הוא העובדה שהוא דורש איתחול כבר בהתחלה, כך שאנחנו יכולים לשלוט מה ערך ברירת המחדל שלו עוד לפני שהגיע המידע האמיתי.

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

אם ברירת המחדל שלו זה מערך ריק אנחנו נוכל להפעיל בקומפוננטה ngIf שיראה תגית מסויימת רק אם יש מידע (המערך גדול יותר מ-0).

הנה דוגמא ליצירה של שירות כזה:

import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { IData } from './interfaces/my-interface.interface';
import { serverData } from './serverData.mock';

@Injectable({
  providedIn: 'root'
})
export class MyService {
  private serverDataSubject: BehaviorSubject<IData[]> = new BehaviorSubject<IData[]>([]);
  public serverDataSubject$: Observable<IData[]> = this.serverDataSubject.asObservable();

  constructor() {  }
  
  getServerData(){
    setTimeout(() => {
      this.serverDataSubject.next(serverData);
    }, 1000);
  }
}

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

הקומפוננטה שרוצה למשוך מידע מהשירות תיצור חיבור ל- serverDataSubject$ ועל ידי הרצה של הפונקציה getServerData , היא תתעדכן.

גם הפונקציה getServerData חשופה לכל הקומפוננטות בפרויקט וכל קומפוננטה שתריץ אותה תגרום לעדכון של כל מי שמחובר ל-serverDataSubject$.

כרגע המידע נלקח מקובץ mock המשמש תחליף לקיראה של AJAX ולכן הוא גם עטוף ב- setTimeout כדי להמחיש התנהגות של קריאה לשרת > המתנה עד לקבלת תשובה > המידע עצמו.

בתוך ההשהיה ניתן לראות את העדכון שהוא מבוצע ע"י קריאה ל-next עם תוכן של מידע – serverData.

עכשיו נראה איך צד מבקש השירות ניראה:

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { IData } from './interfaces/my-interface.interface';
import { MyService } from './my-service.service';

@Component({
  selector: 'app-my-comp',
  templateUrl: './my-comp.component.html',
  styleUrls: ['./my-comp.component.scss']
})
export class MyCompComponent implements OnInit {
 
  myData$: Observable<IData[]>;
  
  constructor(private myDataService: MyService) { }

  ngOnInit() {
    this.myData$ = this.myDataService.serverDataSubject$;
    this.myDataService.getServerData();
  }
}

בשורה 13 הקמנו Observable כדי לחבר אותו למידע שמגיע מהשירות.

בשורה 15 הוספנו את השירות עצמו.

בשורה 18 חיברנו בין המשתנה המקומי של הקומפוננטה לבין המשתנה של השירות.

בשורה 19 הפעלנו את הפונקציה של השירות כדי שתעדכן את המידע מה-mock. כמובן שלא חייבים מידי להפעיל אותה אלא אפשר בלחיצת כפתור של המשתמש או מקומפוננטה אחרת…

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

המלצה:

אני אוהב להשתמש ב- myData$ בצד ה-HTML בצורה הבאה:

  <div>
      <app-child-comp *ngIf="myData$|async as myData"
                      [inputData]="myData"></app-child-comp>
  </div>

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

במקרה הזה, אני מעביר את המידע מהאבא לילד.

פוסטים קשורים:

תמונת אווירה של חצים לכל הכיווניםבניה של טופס דינמי על פי מידע מהשרת באנגולר תמונת אווירה של שלט שינויצורות שונות לקריאה של קומפוננטות אנגולר (angular selector types) תמונת אווירה של אנמצית קוביות צבעוניותמדריך אנימציות באנגולר מדריך אנגולגר טופס ריאקטיבימדריך אנגולר reactive form – יוצאים לדרך.
angular BehaviorSubject Rxjs Service

אודות המחבר

עידן יצחקי להציג את כל הפוסטים של עידן יצחקי


« פוסט קודם
פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
29 בדצמבר 2023 עידן יצחקי

שדה טקסט עשיר עם תמונות

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

1 באוקטובר 2021 עידן יצחקי

איך למשוך דינמית favicon של אתרים אחרים ב-JS

בפוסט זה נראה איך אפשר על פי לינקים בדף למשוך את ה-favicon מהדומיין שלהם באופן דינמי, בדיקה של תקינות התמונה

פופולרי
Javascript functions – היכרות עם סוגי פונקציות
Javascript
21 בדצמבר 2024 אין תגובות
Nested routing in angular standalone component
Typescript
15 בנובמבר 2024 תגובה אחת
בחרו לפי תגיות
angular blockchain css ethers express front-end fullstack GQL html javascript next js nextjs nodejs react hooks reactjs solidity webgl אנגולר בלוקציין וורדפרס לימודי אנגולר לימודי וורדפרס לימוד ריאקט מדריך front-end מדריך GQL מדריך אנגולר מדריך וורדפרס מדריך חינם react מדריך ריאקט מפתח בלוק מפתח בלוקציין מתכנת front-end מתכנת בלוקציין מתכנת פרונט סולידיטי קורס front end קורס fullstack קורס nextjs קורס אנגולר קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי קורס ריאקט קורס תכנות קורס תכנות בחינם
סינון על פי קטגוריות
CSS fullstack HTML IIS Javascript nodeJs SEO Typescript אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד
דילוג לתוכן
פתח סרגל נגישות כלי נגישות

כלי נגישות

  • הגדל טקסטהגדל טקסט
  • הקטן טקסטהקטן טקסט
  • גווני אפורגווני אפור
  • ניגודיות גבוההניגודיות גבוהה
  • ניגודיות הפוכהניגודיות הפוכה
  • רקע בהיררקע בהיר
  • הדגשת קישוריםהדגשת קישורים
  • פונט קריאפונט קריא
  • איפוס איפוס