如何从其他组件访问App.vue?

时间:2018-01-18 10:48:52

标签: vue.js vuejs2 components vue-component

在我用VueJs 2编写的应用程序中,我已经进入了Vue.app这段代码:

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

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

我希望从另一个组件访问属性idfornitore,我用过:

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

或者:

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

但它没有奏效。从另一个组件访问该属性的正确方法是什么?

提前谢谢。

2 个答案:

答案 0 :(得分:4)

  • 使用道具将数据从父母传达给孩子。

  • 发出从孩子到父母沟通的事件

<强> 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>
  • 如果您觉得通过道具进行沟通会产生紧密耦合,那么更方便的方法就是使用eventBus

答案 1 :(得分:1)

组件之间的通信是通过propsevents完成的。

如果您要访问的组件数据具有子关系,则可以使用props。但在您的情况下,您需要更改父数据。为此,您可以发出events。如果组件(您希望更新)是当前组件的直接父级,则事件将是干净的解决方案。

如果不是这样,请使用 EventBus 模式。使用此模式,您可以从任何组件发出事件并在任何其他组件中侦听它们并相应地应用更改。

https://vuejs.org/v2/guide/components.html#Non-Parent-Child-Communication https://alligator.io/vuejs/global-event-bus/

如果需要更频繁地进行组件之间的通信,EventBus模式将产生非常脏的代码并使调试变得非常困难。

要处理多个组件之间的共享状态,强烈建议使用vuex。它使您的应用程序状态易于管理且易于维护。我相信每个真实世界的Vue应用程序都需要状态管理,这可以通过vuex(或其他类似工具)轻松实现,我建议你这样做。

https://vuejs.org/v2/guide/state-management.html

https://vuex.vuejs.org/en/intro.html