vue.js two way data-binding between components












0














Please take a look at this not-working pseudo code:



Vue.component('child', {
props: ,
template: '<div><input v-model="text"></div>',
data: function() {
return {child-text: ""}
}
})

Vue.component('parent', {
template: '<h1> {{text}} </h1>'
data: function() {
return {parent-text: ""}
}
})


What is the most elegant way to fix this code that whenever the user changes the content of input box in child component, then the variable child-text in child component and the variable parent-text in parent component will change automatically? I also want that if the variable child-text and/or parent-text change then the content of input box will change respectively?










share|improve this question




















  • 1




    this should help you :) stackoverflow.com/questions/48877688/…
    – Bhojendra Rauniyar
    Nov 23 '18 at 14:56
















0














Please take a look at this not-working pseudo code:



Vue.component('child', {
props: ,
template: '<div><input v-model="text"></div>',
data: function() {
return {child-text: ""}
}
})

Vue.component('parent', {
template: '<h1> {{text}} </h1>'
data: function() {
return {parent-text: ""}
}
})


What is the most elegant way to fix this code that whenever the user changes the content of input box in child component, then the variable child-text in child component and the variable parent-text in parent component will change automatically? I also want that if the variable child-text and/or parent-text change then the content of input box will change respectively?










share|improve this question




















  • 1




    this should help you :) stackoverflow.com/questions/48877688/…
    – Bhojendra Rauniyar
    Nov 23 '18 at 14:56














0












0








0







Please take a look at this not-working pseudo code:



Vue.component('child', {
props: ,
template: '<div><input v-model="text"></div>',
data: function() {
return {child-text: ""}
}
})

Vue.component('parent', {
template: '<h1> {{text}} </h1>'
data: function() {
return {parent-text: ""}
}
})


What is the most elegant way to fix this code that whenever the user changes the content of input box in child component, then the variable child-text in child component and the variable parent-text in parent component will change automatically? I also want that if the variable child-text and/or parent-text change then the content of input box will change respectively?










share|improve this question















Please take a look at this not-working pseudo code:



Vue.component('child', {
props: ,
template: '<div><input v-model="text"></div>',
data: function() {
return {child-text: ""}
}
})

Vue.component('parent', {
template: '<h1> {{text}} </h1>'
data: function() {
return {parent-text: ""}
}
})


What is the most elegant way to fix this code that whenever the user changes the content of input box in child component, then the variable child-text in child component and the variable parent-text in parent component will change automatically? I also want that if the variable child-text and/or parent-text change then the content of input box will change respectively?







vue.js two-way-binding






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 '18 at 15:17









Husam Ibrahim

2,658315




2,658315










asked Nov 23 '18 at 14:53









CrazySynthax

2,29983171




2,29983171








  • 1




    this should help you :) stackoverflow.com/questions/48877688/…
    – Bhojendra Rauniyar
    Nov 23 '18 at 14:56














  • 1




    this should help you :) stackoverflow.com/questions/48877688/…
    – Bhojendra Rauniyar
    Nov 23 '18 at 14:56








1




1




this should help you :) stackoverflow.com/questions/48877688/…
– Bhojendra Rauniyar
Nov 23 '18 at 14:56




this should help you :) stackoverflow.com/questions/48877688/…
– Bhojendra Rauniyar
Nov 23 '18 at 14:56












1 Answer
1






active

oldest

votes


















1














I solved this with my own little data store, its a very simple approach but works good enough for me without the necessity to dive into Vuex.



First, I create my data store somewhere before initializing anything else.



window.globalData = new Vue({
data: {
$store: {}
},
});


After that, I add a global Mixin that allows to get and set data to the global storage.



Vue.mixin({
computed: {
$store: {
get: function () { return window.globalData.$data.$store },
set: function (newData) { window.globalData.$data.$store = newData; }
}
}
});


Then, every component can access the data storage by this.$store. You can check a working example here:



https://codesandbox.io/s/62wvro7083



Edit Vue Template






share|improve this answer























    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%2f53448855%2fvue-js-two-way-data-binding-between-components%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    I solved this with my own little data store, its a very simple approach but works good enough for me without the necessity to dive into Vuex.



    First, I create my data store somewhere before initializing anything else.



    window.globalData = new Vue({
    data: {
    $store: {}
    },
    });


    After that, I add a global Mixin that allows to get and set data to the global storage.



    Vue.mixin({
    computed: {
    $store: {
    get: function () { return window.globalData.$data.$store },
    set: function (newData) { window.globalData.$data.$store = newData; }
    }
    }
    });


    Then, every component can access the data storage by this.$store. You can check a working example here:



    https://codesandbox.io/s/62wvro7083



    Edit Vue Template






    share|improve this answer




























      1














      I solved this with my own little data store, its a very simple approach but works good enough for me without the necessity to dive into Vuex.



      First, I create my data store somewhere before initializing anything else.



      window.globalData = new Vue({
      data: {
      $store: {}
      },
      });


      After that, I add a global Mixin that allows to get and set data to the global storage.



      Vue.mixin({
      computed: {
      $store: {
      get: function () { return window.globalData.$data.$store },
      set: function (newData) { window.globalData.$data.$store = newData; }
      }
      }
      });


      Then, every component can access the data storage by this.$store. You can check a working example here:



      https://codesandbox.io/s/62wvro7083



      Edit Vue Template






      share|improve this answer


























        1












        1








        1






        I solved this with my own little data store, its a very simple approach but works good enough for me without the necessity to dive into Vuex.



        First, I create my data store somewhere before initializing anything else.



        window.globalData = new Vue({
        data: {
        $store: {}
        },
        });


        After that, I add a global Mixin that allows to get and set data to the global storage.



        Vue.mixin({
        computed: {
        $store: {
        get: function () { return window.globalData.$data.$store },
        set: function (newData) { window.globalData.$data.$store = newData; }
        }
        }
        });


        Then, every component can access the data storage by this.$store. You can check a working example here:



        https://codesandbox.io/s/62wvro7083



        Edit Vue Template






        share|improve this answer














        I solved this with my own little data store, its a very simple approach but works good enough for me without the necessity to dive into Vuex.



        First, I create my data store somewhere before initializing anything else.



        window.globalData = new Vue({
        data: {
        $store: {}
        },
        });


        After that, I add a global Mixin that allows to get and set data to the global storage.



        Vue.mixin({
        computed: {
        $store: {
        get: function () { return window.globalData.$data.$store },
        set: function (newData) { window.globalData.$data.$store = newData; }
        }
        }
        });


        Then, every component can access the data storage by this.$store. You can check a working example here:



        https://codesandbox.io/s/62wvro7083



        Edit Vue Template







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 23 '18 at 15:34

























        answered Nov 23 '18 at 15:25









        Matthias S

        1,3911916




        1,3911916






























            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%2f53448855%2fvue-js-two-way-data-binding-between-components%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

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)