VUE js вызывает метод дочернего компонента в другой иерархии компонентов

У меня есть следующая иерархия компонентов vuejs. Что я хочу сделать, чтобы вызвать метод COMP_B_ONE проверить(), когда метод COMP_A_TWO отправить() вызывается КАЖДЫЙ РАЗ.

MAIN_COMPONENT
              COMP_A_ONE
                    COMP_B_ONE
                          validate()
                    COMP_B_TWO
                          validate()
              COMP_A_TWO
                    submit()      

Я уже реализовал эмит, когда отправка запускается в COMP_A_TWO, которую можно прослушать в ГЛАВНЫЙ КОМПОНЕНТ.

submit() {
  this.$emit('submit')
}

что кажется лучшим подходом в этом отношении? любые предложения приветствуются.

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

AzizAhmad 28.05.2019 08:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу сделать это двумя способами.

1 - Глобальный EventBus Я создам eventBus и пропишу на нем события из любого файла и буду слушать его где угодно —

import { EventBus } from '@/eventBus' 
// simply import it to component which need listen the event


//Register Event where you have your methods - like In your COMP_B_TWO                   
 EventBus.$on('validate', () => { this.validate() })

// Emit event from another component
EventBus.$emit('validate')// Like directly from your COMP_A_TWO

Чтобы узнать, как создать eventBus, следуйте этому — Глобальная шина событий Vue


Другой способ, которым я могу думать, это

2 - ссылки

Добавить ссылку на COMP_A_ONE лайк

<COMP_A_ONE ref = "one" />

Затем добавьте ссылку на COMP_B_ONE

<COMP_B_ONE ref = "b-one" />

Теперь, когда вы запускаете submit из main component

выполнить его -

this.$on('submit', () => {
  this.$refs.one['b-one'].validate()
})

Это полностью зависит от того, каким путем вы хотите пойти -

  • Если вам нужно вызвать validate во многие другие места, я бы посоветовал выбрать EventBus
  • Вам просто нужен текущий компонент, чтобы иметь его, используйте Refs

предпочитаю подход eventBus. Работает хорошо.

Sanath 28.05.2019 09:04

Рад помочь :) Отметьте ответ как принятый, если считаете, что он работает в соответствии со всеми вашими требованиями. Спасибо

Satyam Pathak 28.05.2019 09:11

Другие вопросы по теме