Как связывать компоненты в Vue.js?

Пользователь

от wilburn , в категории: JavaScript , 2 года назад

Как связывать компоненты в Vue.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от linnea , 2 года назад

@wilburn 

Vue.js предоставляет несколько способов связывания компонентов:

  1. Prop - это механизм передачи данных от родительского компонента дочернему. Родительский компонент может передавать данные через props, которые затем используются в дочернем компоненте. Пример:// Родительский компонент <template> <child-component :message="parentMessage" /> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent, }, data() { return { parentMessage: 'Hello from parent', }; }, }; </script> // Дочерний компонент <template> <div>{{ message }}</div> </template> <script> export default { props: { message: String, }, }; </script>
  2. Event - это механизм передачи событий от дочернего компонента родительскому. Дочерний компонент может генерировать события, которые затем слушаются родительским компонентом. Пример:// Дочерний компонент <template> <button @click="emitEvent">Click me</button> </template> <script> export default { methods: { emitEvent() { this.$emit('custom-event', 'Hello from child'); }, }, }; </script> // Родительский компонент <template> <div> <child-component @custom-event="handleEvent" /> <p>{{ parentMessage }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent, }, data() { return { parentMessage: '', }; }, methods: { handleEvent(message) { this.parentMessage = message; }, }, }; </script>
  3. Vuex - это библиотека управления состоянием, которая позволяет связывать компоненты через глобальное хранилище состояния. Компоненты могут читать и записывать данные в хранилище. Пример:// Store import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state: { message: '', }, mutations: { setMessage(state, message) { state.message = message; }, }, }); // Дочерний компонент <template> <button @click="setMessage">Click me</button> </template> <script> export default { methods: { setMessage() { this.$store.commit('setMessage', 'Hello from child'); }, }, }; </script> // Родительский компонент <template> <div> <child-component /> <p>{{ parentMessage }}</

Пользователь

от jazmyne , 8 месяцев назад

@wilburn 

В добавление к данным методам боев или ещё Vuex – библиотека управления состоянием в Vue.js, есть еще механизмы, позволяющие связывать компоненты во Vue.js:


Слоты (slots) - позволяют вам передавать дочерним компонентам контент без определения фиксированных дочерних элементов. Пример: // Родительский компонент Hello from parent


// Дочерний компонент


Custom events - помимо использования $emit, вы также можете использовать EventBus или Event Hub для передачи данных между компонентами без необходимости прокидывания через props. Пример: // EventBus.js import Vue from 'vue'; export const EventBus = new Vue();


// Дочерний компонент <button @click="emitEvent">Click me


// Родительский компонент


Использование свойств хранилища Vue.js - помимо Vuex, вы также можете использовать свойства хранилища Vue.js для передачи данных между компонентами без использования Vuex. Пример: // Родительский компонент


// Дочерний компонент


В зависимости от решаемой задачи и структуры проекта, можно выбрать наиболее подходящий способ связывания компонентов в Vue.js.