Search code examples
vue.jsvuejs2componentsvue-component

How to access App.vue from another component?


in my app written with VueJs 2, I have into the Vue.app this code:

export default {
  name: 'app',
  data () {
    return {
      title: 'Gestione fornitori',
      idfornitore: ''
    }
  },

  methods: {
    loadFunction (route) {
      this.$router.push(route)
    }
  }
}
</script>

I wish to access the property idfornitore from another component, I've used:

    mounted () {
      this.$parent.idfornitore = ''
    },

or also:

    mounted () {
      var Vue = require('vue')
      Vue.app.idfornitore = ''
    },

But it didn't worked. Which is the correct way to access the property from another component?

Thank you in advance.


Solution

    • Use props to communicate data from parent to child.

    • Emit events to communicate from child to parent

    Parent.vue

        <template>
          <div>
             <h2>Parent: {{idfornitore}}</h2>
             <child :idfornitore="idfornitore" @changevalue="idfornitore = $event"></child>
             //idfornitore - data sent to child from parent.
             //changevalue - event emitted from child and received by parent
          </div>
        </template>
    
        <script>
        import Child from './compname.vue';
    
        export default {
            components:{
                "child" : Child
            },
            data(){
                return {
                    idfornitore : "34"
                }
            }
        }
        </script>
    

    Child.vue

    <template>
      <div>
        Child: {{idfornitore}}
        <button @click="add()">Add</button>
      </div>
    </template>
    <script>
    export default {
           props:["idfornitore"],
           methods : {
               add(){
                   this.idfornitore++; // mutating props directly will result in vuejs warning. i have used this code here to show how this works.
                   this.$emit("changevalue",this.idfornitore); //cascade the update to parent
               }
           }
        }
    </script>
    
    • if you feel communicating through props results in tight coupling, then the more convenient approach would be using eventBus