Home >Web Front-end >Vue.js >Component data transfer and event transfer implementation methods in Vue documentation

Component data transfer and event transfer implementation methods in Vue documentation

WBOY
WBOYOriginal
2023-06-20 10:21:182046browse

Vue is a popular front-end framework that has componentization features that allow developers to decompose a complex page into small and independent modules. In Vue, data transfer and event transfer between components are very important topics. In this article, we will introduce in detail the implementation methods of component data transfer and event transfer in Vue.

1. Component data transfer

In Vue, the transfer of component data is divided into two categories, one is the transfer of parent component to child component, and the other is the transfer of child component to parent component. of transmission.

1. Parent component passes data to child component

Parent component needs to use props option to pass data to child component. Props is a way for child component to receive data passed by parent component. Pass data to the child component through v-bind: attribute name in the parent component, and receive data through the props option in the child component.

Look at the code in the parent component first:

<template>
  <div>
    <child-component :title="title"></child-component>
  </div>
</template>

<script>
import ChildComponent from './child.vue'

export default {
  components: { ChildComponent },
  data () {
    return {
      title: 'this is the title'
    }
  }
}
</script>

In the above code, we define a main component and pass the title attribute to the child-component through v-bind: components.

Then look at the code of the subcomponent:

<template>
  <div>
    <h1>{{ title }}</h1>
  </div>
</template>

<script>
export default {
  props: {
    title: {
      type: String,
      required: true
    }
  }
}
</script>

In the above code, we define a subcomponent and receive the title attribute passed by the parent component through the props option.

2. Subcomponent passes data to parent component

To pass data from subcomponent to parent component, you need to use the $emit method. $emit is a way for subcomponent to pass data to parent component. Use the $emit method in the child component to trigger a custom event and pass the data that needs to be passed. Listen to this custom event in the parent component through the @event name, and receive the data passed by the child component in the event response function. .

Look at the code in the subcomponent first:

<template>
  <div>
    <button @click="increment">{{ count }}</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      count: 0
    }
  },
  methods: {
    increment () {
      this.count++
      this.$emit('increment', this.count)
    }
  }
}
</script>

In the above code, we define a subcomponent and use the $emit method to trigger a custom event increment when the button is clicked. And pass the current count value as a parameter to the parent component.

Then look at the code of the parent component:

<template>
  <div>
    <h1>{{ totalCount }}</h1>
    <child-component @increment="onChildIncrement"></child-component>
  </div>
</template>

<script>
import ChildComponent from './child.vue'

export default {
  components: { ChildComponent },
  data () {
    return {
      totalCount: 0
    }
  },
  methods: {
    onChildIncrement (count) {
      this.totalCount += count
    }
  }
}
</script>

In the above code, we define a parent component, and when listening to the increment event of the child component, pass the count value as a parameter to In the response function onChildIncrement, and update the value of totalCount in the response function.

2. Component event delivery

In Vue, event delivery between components can be achieved through the event bus and vuex.

1. Event bus

The event bus is a simple event delivery method. It creates a central event bus. All components can register events or trigger events to the event bus. In Vue, you can use the Vue.prototype.$bus property to create an event bus.

Let’s first look at how to use the event bus:

// main.js中创建事件总线
import Vue from 'vue'

Vue.prototype.$bus = new Vue()

// 在需要传递事件的组件中注册事件和触发事件
this.$bus.$emit('my-event', data)

this.$bus.$on('my-event', (data) => { ... })

In the above code, we created an event bus through the Vue.prototype.$bus property in the main.js file, and then in In the component that needs to pass the event, trigger the custom event my-event through the $emit method, and pass the data that needs to be passed as a parameter to the response function of the event; in the component that needs to receive the event, listen to the custom event my- through the $on method. event, and receive the passed data in the event response function.

2.vuex

vuex is an officially recommended state management solution. It places the state of all components in a global state tree. All components can access the global state from Get and update status in the tree. In vuex, you can use store objects to store global state, and modify global state through mutations, actions, and getters.

Let’s first look at how to use vuex:

// store.js文件
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    asyncIncrement (context) {
      setTimeout(() => {
        context.commit('increment')
      }, 1000)
    }
  },
  getters: {
    doubleCount (state) {
      return state.count * 2
    }
  }
})

// 在组件中使用vuex
import { mapState, mapMutations, mapActions, mapGetters } from 'vuex'

export default {
  computed: {
    ...mapState({
      count: state => state.count
    }),
    ...mapGetters([
      'doubleCount'
    ])
  },
  methods: {
    ...mapMutations([
      'increment'
    ]),
    ...mapActions([
      'asyncIncrement'
    ])
  }
}

In the above code, we define a store object that stores global state in the store.js file, and use mutations, actions, and getters to modify and obtain the global state; in the component, map the state, modification function and action function in the store through auxiliary functions such as mapState, mapMutations, mapActions and mapGetters, and use them in the component.

Conclusion

In Vue, data transfer and event transfer between components are very important topics. For different scenarios and needs, we can use props, $emit, event bus and vuex and other methods to achieve data transfer and event transfer. Mastering these skills allows us to organize and manage our Vue applications more flexibly.

The above is the detailed content of Component data transfer and event transfer implementation methods in Vue documentation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn