मैं Vue2 सीख रहा हूं और वर्तमान में, मेरे पास Laravel, Vue2, Laravel Echo, Sanctum, और Websockets पैकेज का उपयोग करके एक साधारण बॉयलरप्लेट है, सभी Laravel डिफ़ॉल्ट इको सेटअप का उपयोग कर रहे हैं। वहां सब कुछ अच्छा काम करता है।

अब मैं चीजों को अलग करने की कोशिश कर रहा हूं, इसलिए मैंने एक ही बॉयलरप्लेट बनाया है, लेकिन एक Vue SPA के रूप में और Laravel Passport का उपयोग कर रहा हूं (मेरे पास चीजों को अलग करने और पासपोर्ट का उपयोग करने के मेरे कारण हैं)। सब कुछ वहाँ भी ठीक काम करता है, जिसमें एक टाइमलाइन भी शामिल है जिसे मैंने जोड़ा है, लेकिन रीयल-टाइम सामान नहीं।

मुझे कुछ जगहों पर इको इवेंट के साथ यूजर आईडी पास करने की जरूरत है, इसलिए मैंने main.js में एक ग्लोबल यूजर ऑब्जेक्ट बनाया, इस तरह (मैं नेमस्पेस्ड मॉड्यूल का उपयोग कर रहा हूं):

let User = store.state.auth.user
Vue.prototype.$user = User

लेकिन हर बार जब मैं उपयोगकर्ता आईडी को किसी ईवेंट में पास करने का प्रयास करता हूं, तो आईडी अपरिभाषित होती है, इसलिए पुशर चैनल को प्रमाणित नहीं कर सकता है। हालांकि अगर मैं किसी भी घटक के भीतर से उपयोगकर्ता को कंसोल लॉग करता हूं, तो मैं आईडी के साथ उपयोगकर्ता ऑब्जेक्ट देख सकता हूं। मैं ईवेंट को वेबसोकेट डैशबोर्ड में भी देख सकता हूं। तो आईडी पास करने के अलावा सब कुछ सामान्य काम करता है। अगर मैं ऐसा करता हूं:

  Echo.private(`timeline.${this.$user.id}`)
      .listen('.PostWasCreated', (e) => {
       this.PUSH_POSTS([e])
     })

परिणाम यह है:

private-timeline.undefined

मैंने अन्य सिंटैक्स की भी कोशिश की है, जैसे:

   Echo.private('timeline.'+this.$user.id)
        .listen('.PostWasCreated', (e) => {
         this.PUSH_POSTS([e])
     })

मुझे यह निर्धारित करने में मुश्किल हो रही है कि आईडी पास करने में सक्षम होने के लिए मैं क्या खो रहा हूं।

0
Jazzman 5 पद 2020, 01:18

1 उत्तर

सबसे बढ़िया उत्तर

असाइनमेंट के बजाय स्थगित करने के लिए फ़ंक्शन का उपयोग करने का प्रयास करें। यह असाइनमेंट के दौरान परिभाषित नहीं है।

Vue.prototype.$getUser = ()=>store.state.auth.user
Echo.private(`timeline.${this.$getUser().id}`)
      .listen('.PostWasCreated', (e) => {
       this.PUSH_POSTS([e])
     })

या सीधे स्टोर तक पहुंचें।

Echo.private(`timeline.${this.$store.state.auth.user.id}`)
      .listen('.PostWasCreated', (e) => {
       this.PUSH_POSTS([e])
     })

या इससे भी बेहतर, अपने स्टोर में गेट्टर का उपयोग करें। (मैं गेटटर जोड़ने के लिए इसे आप पर छोड़ दूंगा ...)

Echo.private(`timeline.${this.$store.getters.userId}`)
      .listen('.PostWasCreated', (e) => {
       this.PUSH_POSTS([e])
     })
1
Steven Spungin 5 पद 2020, 05:06