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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. אנגולר JS - שירותים (אשמח לביאור העניין)

אנגולר JS - שירותים (אשמח לביאור העניין)

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 3 כותבים 233 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    ש.ב.ח.
    כתב ב נערך לאחרונה על ידי ש.ב.ח.
    #1

    שלום וברכה
    אני כרגע לומד את אנגולר JS
    1.7

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

    י תגובה 1 תגובה אחרונה
    0
    • י מנותק
      י מנותק
      יוסף בן שמעון
      השיב לש.ב.ח. ב נערך לאחרונה על ידי יוסף בן שמעון
      #2

      @ש-ב-ח אמר באנגולר JS - שירותים (אשמח לביאור העניין):

      אני מעוניין להשתמש באותו אובייקט בכמה בקרים, אני מבין שזו הדרך, אכן?

      אכן

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

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

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

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

      ש תגובה 1 תגובה אחרונה
      0
      • ש מנותק
        ש מנותק
        ש.ב.ח.
        השיב ליוסף בן שמעון ב נערך לאחרונה על ידי
        #3

        @יוסף-בן-שמעון
        אנסה להסביר את עצמי...

        אני מכיר גם קצת את אנגולר (2-8)
        שם זה עובד בclass,
        כמחלקה מופעלת מופעלות הפונקציות הבונות שלה כמו קונסטרקטור (באנגולר יש עוד פונקציות ע"פ מחזור החיים של המחלקה).
        כאן אני לא מבין מה נעשה לפני מה ומה יחזור,

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

        אם אני יכניס את הפונקציה בתור הretrun כמו זה:

        app.factory('posts',['$http', function($http){
        		
        	
        	return{
        		
        		getPosts: function(limit , count = 0){
        			var response = $http({
        			method: 'post',
        			url: get_posts_object.ajaxurl,
        			params:{
        				action: 'get_posts',
        				limit: limit,
        				count: count,
        				nonce: get_posts_object.nonce
        			},
        
        			}).then(function(response){
        				return response.data;
        			});
        			return response;
        		}
        	}
        	
        }]);
        

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

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

        תגובה 1 תגובה אחרונה
        0
        • ש מנותק
          ש מנותק
          ש.ב.ח.
          כתב ב נערך לאחרונה על ידי ש.ב.ח.
          #4

          טוב, הסתדרתי כך, לא יודע אם זו הדרך... אבל זה עובד.

          app.factory('posts',['$http','$routeParams', function($http){
          		
          	return{
          		
          		posts: 0,
          		getPosts: function(){
          			
          			if(this.posts === 0){
          				var response = $http({
          				method: 'post',
          				url: get_posts_object.ajaxurl,
          				params:{
          					action: 'get_posts',
          					nonce: get_posts_object.nonce
          				},
          
          				}).then(function(response){
          					return response.data;					
          				});
          				this.posts = response;
          			}
          			
          			return this.posts;
          			
          		}
          	}
          		
          }]);
          
          תגובה 1 תגובה אחרונה
          1
          • י מנותק
            י מנותק
            יוסף בן שמעון
            כתב ב נערך לאחרונה על ידי
            #5
            פוסט זה נמחק!
            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי dovid
              #6

              @ש-ב-ח בקוד שלך יש בעיות ש@יוסף-בן-שמעון כתב ומשום מה מחק.
              הבעיה היא שבפעם הראשונה שתקרא לgetPosts לא תידע מתי התשובה התקבלה וממילא תעשה שימוש בערך לא נכון.
              אני ממליץ לך על קוד קצר בהרבה:

              app.factory('posts', ['$http', function ($http) {
                  var task = $http.post(get_posts_object.ajaxurl,
                                        { action: 'get_posts', nonce: get_posts_object.nonce })
                                  .then(function(response){
                                      return response.data;
                                  });
              
                  return task;
              }]);
              

              אופן השימוש:

               myApp.controller('ctrl', ['posts', function(posts) {
                    posts.then(function(value){
                          //bla bla
                    });
               }]);
              

              נכון, כל שימוש בposts חייב להיות בתוך then זאת למרות שהבקשה תופעל רק פעם אחת בעולם.
              אם אתה רוצה להשתמש באובייקט עצמו שחוזר ישירות בHTML וככה אנגולר "מעדכנת" אותו, זה אכן רעיון, והקוד שלך אם ככה בעייתי בגלל שבמקרה כזה אף אחד לא קורא לgetPosts.
              הנה הקוד לזה אם התכוונת:

              app.factory('posts', ['$http', '$routeParams', function ($http) {
                  return {
                      posts: 0,
                      task: $http.post(get_posts_object.ajaxurl,
                                       { action: 'get_posts', nonce: get_posts_object.nonce })
                                 .then(function(response){
                                      this.data = response.data;
                                      return this.data;
                                  })
                      };
              }]);
              
              myApp.controller('ctrl', ['posts', function(posts) {
                  this.postsObj = posts;
                  // {{ postsObj.data }} refreshed automaticaly in html
                  //but in code you need know if the task has been finished:
                  //this.postsObj.task.then(...)
              }]);
              

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              ש 2 תגובות תגובה אחרונה
              1
              • ש מנותק
                ש מנותק
                ש.ב.ח.
                השיב לdovid ב נערך לאחרונה על ידי ש.ב.ח.
                #7

                @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

                הבעיה היא שבפעם הראשונה שתקרא לgetPosts לא תידע מתי התשובה התקבלה וממילא תעשה שימוש בערך לא נכון.
                אני ממליץ לך על קוד קצר בהרבה:

                למה?
                הרי הgetPosts מחזיר תמיד את הposts, אם הposts שווה ל0 כבתחילת ברייתו תתבצע קריאה לשרת הנתונים ע"מ להביא את אובייקט מהשרת ולהכיל בposts ורק אז יחזיר אותו, מעתה כל קריאה תחזיר את הposts בלי לקרוא לשרת מכיוון שהוא לא שווה ל0.

                @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

                אופן השימוש:

                ושוב בכל קונטרולר בו נעשה שימוש בgetPosts הוא יקרא לשרת, ואת זה בדיוק אני מעוניין לחסוך.

                @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

                למרות שהבקשה תופעל רק פעם אחת בעולם.

                לא ברור למה כתבת את זה, כמו שכתבתי קודם: שימוש חוזר בgetPosts בקונטרולר אחר יקרא שוב מהשרת.

                @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

                הנה הקוד לזה אם התכוונת:

                וכאן, מי יקרא לפונקציה שתכיל את הנתונים בposts?

                dovidD תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  השיב לש.ב.ח. ב נערך לאחרונה על ידי
                  #8

                  @ש-ב-ח אמר באנגולר JS - שירותים (אשמח לביאור העניין):

                  למה?
                  הרי הgetPosts מחזיר תמיד את הposts, אם הposts שווה ל0 כבתחילת ברייתו תתבצע קריאה לשרת הנתונים ע"מ להביא את אובייקט מהשרת ולהכיל בposts ורק אז יחזיר אותו, מעתה כל קריאה תחזיר את הposts בלי לקרוא לשרת מכיוון שהוא לא שווה ל0.

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

                  ושוב בכל קונטרולר בו נעשה שימוש בgetPosts הוא יקרא לשרת, ואת זה בדיוק אני מעוניין לחסוך.

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

                  וכאן, מי יקרא לפונקציה שתכיל את הנתונים בposts?

                  בקוד שלי אין פוקנציה, אלא הtask מכיל פרומייז שרץ מיידית בעת יצירת האובייקט.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  ש תגובה 1 תגובה אחרונה
                  0
                  • ש מנותק
                    ש מנותק
                    ש.ב.ח.
                    השיב לdovid ב נערך לאחרונה על ידי ש.ב.ח.
                    #9

                    @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

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

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

                    @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

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

                    וודאי שזה מה שעשיתי בתחילה, וראיתי קריאה בכל גישה למשתנה (הפקטורי) מכל קונטרולר בנפרד, אנסה שוב...
                    עדכון: כנראה שמה שניסיתי מתחילה היה שונה (אני גם חושב שאכן השתמשתי בפונקציה בתוך האובייקט (כנראה זה מה שכתב @dovid "בקוד שלי אין פוקנציה, אלא הtask מכיל פרומייז שרץ מיידית בעת יצירת האובייקט".), אז השאלה הבאה לא נשאלת... (אני לא מוחק, אולי יבוא אחר וילמד מהטעות וניסוח השאלה...)

                    תודה.

                    @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

                    בקוד שלי אין פוקנציה, אלא הtask מכיל פרומייז שרץ מיידית בעת יצירת האובייקט.

                    נכון, ואיך קוראים לו לפעול....?

                    תגובה 1 תגובה אחרונה
                    0
                    • dovidD מנותק
                      dovidD מנותק
                      dovid ניהול
                      כתב ב נערך לאחרונה על ידי
                      #10

                      @ש-ב-ח זה לא עובד. הסיבה שנראה לך עובד זה כי בהמשך אין לזה ביטוי. תבדוק את זה בקונסול

                      function test(){
                          fetch("/").then(function(){
                              return 123;
                          })
                      }
                      test();
                      

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      תגובה 1 תגובה אחרונה
                      0
                      • ש מנותק
                        ש מנותק
                        ש.ב.ח.
                        השיב לdovid ב נערך לאחרונה על ידי
                        #11

                        @dovid אמר באנגולר JS - שירותים (אשמח לביאור העניין):

                        הנה הקוד לזה אם התכוונת:

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

                        posts.data.push(new_value)
                        
                        תגובה 1 תגובה אחרונה
                        0
                        • ש מנותק
                          ש מנותק
                          ש.ב.ח.
                          כתב ב נערך לאחרונה על ידי
                          #12

                          הסתדרתי, תודה.

                          תגובה 1 תגובה אחרונה
                          0

                          בא תתחבר לדף היומי!
                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

                          • התחברו או הירשמו כדי לחפש.
                          • פוסט ראשון
                            פוסט אחרון
                          0
                          • דף הבית
                          • קטגוריות
                          • פוסטים אחרונים
                          • משתמשים
                          • חיפוש
                          • חוקי הפורום