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











up vote
1
down vote

favorite












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 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 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 at 2:34















up vote
1
down vote

favorite












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 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 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 at 2:34













up vote
1
down vote

favorite









up vote
1
down vote

favorite











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 at 19:00









Min XIE

477




477












  • 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 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 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 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 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 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 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 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 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 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 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 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 at 2:34

















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',
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






























active

oldest

votes













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.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • 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

How to change which sound is reproduced for terminal bell?

Can I use Tabulator js library in my java Spring + Thymeleaf project?

Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents