Any way to pass data between non-related Vue components without using Event Bus?










1















First I want to be clear why I don't want to use Event Bus in this situation: Because Event Bus won't work for this situation!



Please see the simplified structure of my Vue.js Project first:



App.vue
|---Map.vue
|---Info.vue
| |---layerInfo.vue
|
|---WMS.vue
|---WFS.vue
|---Basic.vue


The diagram only shows which component creates which child component, but they are not all created at the start of the Vue app. The layerInfo.vue will only be created when some conditions are filled (You can image only after the use click the button, the layerInfo.vue will be rendered/created)



What have I done:



In Map.vue component, I have created a Object map, which contains the useful information, and I $emit the map to a Global Event Bus.



The Problem is, at this momente, the layerinfo.vue doesn't exist. So I can't listen to the $emit event use $on. (Even I tried, I didn't get the map)




And a further question about Event Bus: I used Event Bus in my other part of the vue app. But I am still confused, if the Event Bus makes a two-way-data-binding or only one-way?
My conclusion: global Event Bus can only be userd to pass data between two non-related components when they both exist.



But my question is: how I can then pass date between two non-related components when I don't know when the one that needs to receive the data will be created / rendered?










share|improve this question






















  • I haven't used it so I can't be sure, but I think Vuex might be useful.

    – The Guy with The Hat
    Nov 14 '18 at 19:49











  • @TheGuywithTheHat Thank you for the advise. After looking into vuex a little bit. I am almost sure that is want I need.

    – Min XIE
    Nov 14 '18 at 23:17











  • The pure Vue approach is to use events. If you want a global variable manager then yes, Vuex is definitely what you need. In fact I'd recommend it anyway, it's quite powerful.

    – Simon Hyll
    Nov 15 '18 at 2:34















1















First I want to be clear why I don't want to use Event Bus in this situation: Because Event Bus won't work for this situation!



Please see the simplified structure of my Vue.js Project first:



App.vue
|---Map.vue
|---Info.vue
| |---layerInfo.vue
|
|---WMS.vue
|---WFS.vue
|---Basic.vue


The diagram only shows which component creates which child component, but they are not all created at the start of the Vue app. The layerInfo.vue will only be created when some conditions are filled (You can image only after the use click the button, the layerInfo.vue will be rendered/created)



What have I done:



In Map.vue component, I have created a Object map, which contains the useful information, and I $emit the map to a Global Event Bus.



The Problem is, at this momente, the layerinfo.vue doesn't exist. So I can't listen to the $emit event use $on. (Even I tried, I didn't get the map)




And a further question about Event Bus: I used Event Bus in my other part of the vue app. But I am still confused, if the Event Bus makes a two-way-data-binding or only one-way?
My conclusion: global Event Bus can only be userd to pass data between two non-related components when they both exist.



But my question is: how I can then pass date between two non-related components when I don't know when the one that needs to receive the data will be created / rendered?










share|improve this question






















  • I haven't used it so I can't be sure, but I think Vuex might be useful.

    – The Guy with The Hat
    Nov 14 '18 at 19:49











  • @TheGuywithTheHat Thank you for the advise. After looking into vuex a little bit. I am almost sure that is want I need.

    – Min XIE
    Nov 14 '18 at 23:17











  • The pure Vue approach is to use events. If you want a global variable manager then yes, Vuex is definitely what you need. In fact I'd recommend it anyway, it's quite powerful.

    – Simon Hyll
    Nov 15 '18 at 2:34













1












1








1








First I want to be clear why I don't want to use Event Bus in this situation: Because Event Bus won't work for this situation!



Please see the simplified structure of my Vue.js Project first:



App.vue
|---Map.vue
|---Info.vue
| |---layerInfo.vue
|
|---WMS.vue
|---WFS.vue
|---Basic.vue


The diagram only shows which component creates which child component, but they are not all created at the start of the Vue app. The layerInfo.vue will only be created when some conditions are filled (You can image only after the use click the button, the layerInfo.vue will be rendered/created)



What have I done:



In Map.vue component, I have created a Object map, which contains the useful information, and I $emit the map to a Global Event Bus.



The Problem is, at this momente, the layerinfo.vue doesn't exist. So I can't listen to the $emit event use $on. (Even I tried, I didn't get the map)




And a further question about Event Bus: I used Event Bus in my other part of the vue app. But I am still confused, if the Event Bus makes a two-way-data-binding or only one-way?
My conclusion: global Event Bus can only be userd to pass data between two non-related components when they both exist.



But my question is: how I can then pass date between two non-related components when I don't know when the one that needs to receive the data will be created / rendered?










share|improve this question














First I want to be clear why I don't want to use Event Bus in this situation: Because Event Bus won't work for this situation!



Please see the simplified structure of my Vue.js Project first:



App.vue
|---Map.vue
|---Info.vue
| |---layerInfo.vue
|
|---WMS.vue
|---WFS.vue
|---Basic.vue


The diagram only shows which component creates which child component, but they are not all created at the start of the Vue app. The layerInfo.vue will only be created when some conditions are filled (You can image only after the use click the button, the layerInfo.vue will be rendered/created)



What have I done:



In Map.vue component, I have created a Object map, which contains the useful information, and I $emit the map to a Global Event Bus.



The Problem is, at this momente, the layerinfo.vue doesn't exist. So I can't listen to the $emit event use $on. (Even I tried, I didn't get the map)




And a further question about Event Bus: I used Event Bus in my other part of the vue app. But I am still confused, if the Event Bus makes a two-way-data-binding or only one-way?
My conclusion: global Event Bus can only be userd to pass data between two non-related components when they both exist.



But my question is: how I can then pass date between two non-related components when I don't know when the one that needs to receive the data will be created / rendered?







javascript vue.js vuejs2 vue-component






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 14 '18 at 19:00









Min XIEMin XIE

638




638












  • I haven't used it so I can't be sure, but I think Vuex might be useful.

    – The Guy with The Hat
    Nov 14 '18 at 19:49











  • @TheGuywithTheHat Thank you for the advise. After looking into vuex a little bit. I am almost sure that is want I need.

    – Min XIE
    Nov 14 '18 at 23:17











  • The pure Vue approach is to use events. If you want a global variable manager then yes, Vuex is definitely what you need. In fact I'd recommend it anyway, it's quite powerful.

    – Simon Hyll
    Nov 15 '18 at 2:34

















  • I haven't used it so I can't be sure, but I think Vuex might be useful.

    – The Guy with The Hat
    Nov 14 '18 at 19:49











  • @TheGuywithTheHat Thank you for the advise. After looking into vuex a little bit. I am almost sure that is want I need.

    – Min XIE
    Nov 14 '18 at 23:17











  • The pure Vue approach is to use events. If you want a global variable manager then yes, Vuex is definitely what you need. In fact I'd recommend it anyway, it's quite powerful.

    – Simon Hyll
    Nov 15 '18 at 2:34
















I haven't used it so I can't be sure, but I think Vuex might be useful.

– The Guy with The Hat
Nov 14 '18 at 19:49





I haven't used it so I can't be sure, but I think Vuex might be useful.

– The Guy with The Hat
Nov 14 '18 at 19:49













@TheGuywithTheHat Thank you for the advise. After looking into vuex a little bit. I am almost sure that is want I need.

– Min XIE
Nov 14 '18 at 23:17





@TheGuywithTheHat Thank you for the advise. After looking into vuex a little bit. I am almost sure that is want I need.

– Min XIE
Nov 14 '18 at 23:17













The pure Vue approach is to use events. If you want a global variable manager then yes, Vuex is definitely what you need. In fact I'd recommend it anyway, it's quite powerful.

– Simon Hyll
Nov 15 '18 at 2:34





The pure Vue approach is to use events. If you want a global variable manager then yes, Vuex is definitely what you need. In fact I'd recommend it anyway, it's quite powerful.

– Simon Hyll
Nov 15 '18 at 2:34












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53307075%2fany-way-to-pass-data-between-non-related-vue-components-without-using-event-bus%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53307075%2fany-way-to-pass-data-between-non-related-vue-components-without-using-event-bus%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Top Tejano songwriter Luis Silva dead of heart attack at 64

ReactJS Fetched API data displays live - need Data displayed static

Evgeni Malkin