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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. גישה ל$store לקבלת ערך עבור ייבוא קומפוננט

גישה ל$store לקבלת ערך עבור ייבוא קומפוננט

מתוזמן נעוץ נעול הועבר תכנות
20 פוסטים 3 כותבים 416 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • chagoldC מנותק
    chagoldC מנותק
    chagold
    השיב לyossiz ב נערך לאחרונה על ידי
    #3

    @yossiz
    למה זה עושה לי את זה?

    Failed to compile.
    
    ./src/router/index.js
    Module not found: Error: Can't resolve '@/store' in 'C:\projects\adminify-seed\src\router'
    

    הנתיב כדבריך
    4c1bf923-7afb-43bc-a95e-8f366683b386-image.png

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

      @chagold לפי מבנה הפרוייקט אצלך נראה לי שצריך:

      import store from '@/store/store'
      

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      chagoldC תגובה 1 תגובה אחרונה
      0
      • chagoldC מנותק
        chagoldC מנותק
        chagold
        השיב לyossiz ב נערך לאחרונה על ידי
        #5

        @yossiz tempsnip.png

        ובawite ככה:

        async function f3() {
        
        const store = await import('@/store/store')  
        const user = store.getters.getUser
        console.log(user)
        }
        f3() 
        

        השגיאה ככה
        05f1cf0c-aeec-441f-b066-a7cf66a31023-image.png

        yossizY תגובה 1 תגובה אחרונה
        0
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לchagold ב נערך לאחרונה על ידי yossiz
          #6

          @chagold מה קובץ store.js מייצא? אולי זה נקרא בשם אחר, יש ייצוא דיפולטי?

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          chagoldC תגובה 1 תגובה אחרונה
          0
          • chagoldC מנותק
            chagoldC מנותק
            chagold
            השיב לyossiz ב נערך לאחרונה על ידי
            #7

            @yossiz

            export const store = new Vuex.Store({
            	modules: {
            		settings,
            		auth,
            		adminModouls,
            		typesprojects
            	}
            })
            
            yossizY תגובה 1 תגובה אחרונה
            0
            • yossizY מנותק
              yossizY מנותק
              yossiz
              השיב לchagold ב נערך לאחרונה על ידי yossiz
              #8

              @chagold אם כן נראה לי שה-import אמור להיות ככה:

              import { store } from '@/store/store'
              

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              chagoldC תגובה 1 תגובה אחרונה
              1
              • chagoldC chagold התייחס לנושא זה ב
              • chagoldC מנותק
                chagoldC מנותק
                chagold
                השיב לyossiz ב נערך לאחרונה על ידי chagold
                #9

                @yossiz הבעיה הבאה.

                לכאו' הייתי אמור לקבל את הפרמטרים מתוך האקשין ואמור להפעיל את הimport ככה:

                store.dispatch('get_data_project')
                 .then(
                   data_project => {
                     import......
                })
                

                אבל ככה יש שגיאת import' and 'export' may only appear at the top level (5:2) שכמופיע כאן זה בגלל שהimport חייב להיות בסקופ העליון.
                והואיל והסקופ העליון הוא לא פונקציית async (ובדקתי וגם הכנסתו לasync לא תפתור את הבעיה), אז גם אין לי אפשרות לעכב אותו בawait עד שהפרמטר יבוא. - -

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

                  @chagold
                  אני זורק משהו, כי אני לא יודע בדיוק איפה בקוד שלך זה נמצא.
                  אבל אולי תשקול לעשות בפונקציית הראוטינג await עד שהמידע מוכן ונטען לתוך משתנה רגיל ב store ואז יהיה לך גישה לזה בכל קומפוננטה ללא המתנה.
                  זה מה שעשיתי אצלי ופתר לי הרבה כאבי ראש

                  chagoldC 2 תגובות תגובה אחרונה
                  0
                  • chagoldC מנותק
                    chagoldC מנותק
                    chagold
                    השיב לחוקר ב נערך לאחרונה על ידי chagold
                    #11

                    @חוקר אני נמצא בתוך הrouter.js.

                    לא הבנתי את המימוש שלך. הבעיה שלי היא לא בstore אלא בimport שאני צריך אפשרות לבחור דינמית קונטיינור.

                    אני פתוח גם לכיוונים אחרים.

                    chagoldC תגובה 1 תגובה אחרונה
                    0
                    • chagoldC מנותק
                      chagoldC מנותק
                      chagold
                      השיב לchagold ב נערך לאחרונה על ידי
                      #12

                      הפתרון כאן

                      תגובה 1 תגובה אחרונה
                      0
                      • chagoldC מנותק
                        chagoldC מנותק
                        chagold
                        השיב לחוקר ב נערך לאחרונה על ידי chagold
                        #13

                        @חוקר אמר בגישה ל$store לקבלת ערך עבור ייבוא קומפוננט:

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

                        @חוקר אם תוכל להדגים לי איך עשית בstore.
                        תודה רבה.

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

                          @chagold אמר בגישה ל$store לקבלת ערך עבור ייבוא קומפוננט:

                          @חוקר אמר בגישה ל$store לקבלת ערך עבור ייבוא קומפוננט:

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

                          @חוקר אם תוכל להדגים לי איך עשית בstore.
                          תודה רבה.

                          אני עדיין לא כ"כ הצלחתי להתרכז מה בדיוק היה שאלתך ואם מה שאני עשיתי יפתור לך את בעיותך
                          לי היו בעיות שבקומפוננטות השונות הייתי צריך את פרטי המשתמש המאוחסנים ב store והייתי צריך לעשות למגוון פעולות await וכו' ולדעת שיש לי את המידע לפעולות הבאות ועוד
                          מה שעשיתי הוא כך בקובץ src/router/index.js שיניתי

                          
                          router.beforeEach(async (to, _, next) => {
                            const isLoggedIn = isUserLoggedIn()
                            if (isLoggedIn) {
                              await store.dispatch('app/getUserinfo').catch(error => {
                                // eslint-disable-next-line no-console
                                console.error(error)
                              })
                            }
                            if (!canNavigate(to)) {
                              // Redirect to login if not logged in
                              if (!isLoggedIn) return next({ name: 'auth-login' })
                          
                              // If logged in => not authorized
                              return next({ name: 'misc-not-authorized' })
                            }
                          
                            // Redirect if logged in
                            if (to.meta.redirectIfLoggedIn && isLoggedIn) {
                              const userData = getUserData()
                              next(getHomeRouteForLoggedInUser(userData ? userData.role : null))
                            }
                          
                            return next()
                          })
                          

                          בקובץ src/store/app/index.js הוספתי ב actions

                              getUserInfo(state) {
                                if (state.state.userData2) {
                                  return state.state.userData2
                                }
                                state.state.userData2 = new Promise((resolve, reject) => {
                                  const url = '/dashboard/api/user/info'
                                  useJwt.axiosIns.get(url).then(response => {
                                    const { userData } = response.data
                                    localStorage.setItem('userData', JSON.stringify(userData))
                                    state.state.userData = response.data.userDataUser
                                    // eslint-disable-next-line radix,no-nested-ternary
                                    state.state.selectedProject = response.data.userDataUser.length > 1 && localStorage.getItem('selectedProject') ? response.data.userDataUser.find(l => l.id === parseInt(localStorage.getItem('selectedProject'))) : (response.data.userDataUser.length > 1 ? null : response.data.userDataUser[0])
                                    // console.log(state.state.selectedProject)
                                    this.dispatch('app/getProjectInfo').then(() => {
                                      resolve(state)
                                    }).catch(error => {
                                      reject(error)
                                    })
                                  }).catch(error => {
                                    reject(error)
                                  })
                                })
                                return state.state.userData2
                              },
                          

                          הפונקציה getProjectInfo מיועדת מחזירה ג"כ פרומיז עם פרטי הפרוייקט הפתוח
                          מה שגורם, שלפני הניתוב (וה"ה בריענון, לפני טעינת הדף הדף הפתוח, כי גם זה בעצם ניתוב) הדפדפן ישאב מהAPI את המידע המבוקש ויטען אותו לstore וכעת אני חופשי בכל הקומפננטות לגשת למידע המאוחסן
                          לדוגמא

                          computed: {
                              sortOptions() {
                                // Create an options list from our fields
                                return this.fields
                                  .filter(f => f.sortable !== false)
                                  .map(f => ({ text: f.label, value: f.key }))
                              },
                              getSelectedProject: () => store.state.app.selectedProject,
                            },
                            watch: {
                              getSelectedProject(val) {
                                this.selectedProject = val
                                this.updateSelectedDate()
                              },
                            },
                          

                          מקווה שהועלתי משהו

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

                            כעת לאחר עיון אני מבין שהשאלה שלך הייתה שאתה רוצה לטעון את הקומפוננטה של האדמין או הקליינט לפי המידע בסטור? משהו כזה?
                            א"כ זה לא קשור למה שעשיתי
                            אני הייתי עושה טעינה של שניהם ורק עושה v-if מה להציג
                            אבל אולי אתה צודק במהלך שלך כי זה יחסוך ביצועים שלא לטעון קומפוננטות מיותרות
                            מעניין אם יש יאפשר להפעיל כמה פרוייקטים על תבנית אחת

                            chagoldC תגובה 1 תגובה אחרונה
                            1
                            • chagoldC מנותק
                              chagoldC מנותק
                              chagold
                              השיב לחוקר ב נערך לאחרונה על ידי chagold
                              #16
                              פוסט זה נמחק!
                              תגובה 1 תגובה אחרונה
                              0
                              • ח מנותק
                                ח מנותק
                                חוקר
                                כתב ב נערך לאחרונה על ידי
                                #17

                                מה שאני בדקתי כעת זה כזה דבר

                                
                                Vue.use(VueRouter)
                                
                                const component = () => import('@/views/dashboard/ecommerce/Ecommerce.vue')
                                const component2 = import('@/views/dashboard/analytics/Analytics.vue')
                                const router = new VueRouter({
                                  mode: 'history',
                                  base: process.env.BASE_URL,
                                  scrollBehavior() {
                                    return { x: 0, y: 0 }
                                  },
                                  routes: [
                                    { path: '/', redirect: { name: 'dashboard' } },
                                    {
                                      path: '/dashboard',
                                      name: 'dashboard',
                                      component: document.URL === 'http://localhost:8080/dashboard' || document.URL === 'http://mysite/dashboard' ? component2 : component,
                                      meta: {
                                        resource: 'ACL',
                                        action: 'official',
                                        title: 'ממשק הניהול',
                                      },
                                    },
                                    {
                                      path: '/list',
                                      name: 'list',
                                      // eslint-disable-next-line import/extensions
                                      component,
                                      meta: {
                                        resource: 'ACL',
                                        action: 'official',
                                        title: 'רשימה',
                                      },
                                    },
                                    {
                                      path: '*',
                                      redirect: 'error-404',
                                    },
                                  ],
                                })
                                

                                לי היה מעניין אם אני יוכל לשלב 2 אתרים על פרוייקט אחד.
                                חשבתי מראש שאני יוכל לטעון את הכל מראש, דהיינו בקובץ rout/index.js אני יכול לטעון מראש את כל הניתובים = כל הקומפוננטות, ורק את התפריטים לעשות דינאמיים, והם יהיו תלויים בכתובת הדומיין, אבל הציק לי הרעיון של טעינת כמה אתרים באתר אחד שזה יגרום לכל משתמש תעבורה מיותרת.
                                ומכיוון שבנסיונות של @chagold היה נראה שלא ניתן לייבא מראש import עם נתיב דינאמי הנלקח ממשתנה, הבנתי שיהיה עלי לטעון תמיד את כל האתרים לכל לקוח שפותח את אחד האתרים, מה שכמובן מיותר ומסורבל.
                                לכן ניסיתי כעת לבדוק מה קורה עם גם את הייבוא של הקומפוננטות עצמן אנסה לבצע עם תנאים, אבדוק האם הם נטענים כבר בטעינת הראשונית של הדף או לא.
                                ומה שיצא לי זה כך:
                                אם זה היה נטען בצורה כזו:

                                const component2 = import('@/views/dashboard/analytics/Analytics.vue')
                                

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

                                const component = () => import('@/views/dashboard/ecommerce/Ecommerce.vue')
                                

                                כל זמן שלא הפעלתי ניתוב (בדוגמא שלי, כל זמן שלא עברתי אל http://localhost:8080/dashboard), התוכן עוד לא ירד לאתר בכלל, ורק בעת המעבר לניתוב המבוקש זה נטען באמצעות http://mysite/js/chunk-2d332689b.92d2c0b9.js שמוריד את תוכן לדף.
                                41501367-2215-4a5a-b924-2c9cc19cc9d6-image.png

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

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

                                  @חוקר
                                  אני רואה כעת שגם בגלגול בגוגל נראה שזה הכיוון של התוצאות
                                  א"כ נראה שאני בכיוון טוב
                                  https://github.com/apal21/Vue.js-VueRouter-multiple-subdomains

                                  תגובה 1 תגובה אחרונה
                                  1
                                  • chagoldC מנותק
                                    chagoldC מנותק
                                    chagold
                                    השיב לחוקר ב נערך לאחרונה על ידי chagold
                                    #19

                                    @חוקר אמר בגישה ל$store לקבלת ערך עבור ייבוא קומפוננט:

                                    כל זמן שלא הפעלתי ניתוב (בדוגמא שלי, כל זמן שלא עברתי אל http://localhost:8080/dashboard), התוכן עוד לא ירד לאתר בכלל, ורק בעת המעבר לניתוב המבוקש זה נטען באמצעות http://mysite/js/chunk-2d332689b.92d2c0b9.js שמוריד את תוכן לדף.

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

                                    לגופו של ענין, אכלתי ע"ז הרבה קש, אבל המסקנא לכאו' כדבריך.

                                    chagoldC תגובה 1 תגובה אחרונה
                                    1
                                    • chagoldC מנותק
                                      chagoldC מנותק
                                      chagold
                                      השיב לchagold ב נערך לאחרונה על ידי chagold
                                      #20

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

                                      תגובה 1 תגובה אחרונה
                                      1
                                      • chagoldC chagold התייחס לנושא זה ב
                                      • chagoldC chagold התייחס לנושא זה ב
                                      • chagoldC chagold התייחס לנושא זה ב
                                      • chagoldC chagold התייחס לנושא זה ב
                                      • chagoldC chagold התייחס לנושא זה ב

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

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

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