#vue.js
#vue.js
Вопрос:
У меня есть основной компонент, содержащий другие компоненты, которые содержат другие компоненты.
Итак, у меня есть события щелчка в этих компонентах, но чтобы обработать их в моем родительском компоненте, мне нужно выполнить $emit
вызов в каждом вложенном компоненте.
Как сделать этот процесс более простым, например, как в React, где мне нужно просто передать обработчик функции в компонент.
Ответ №1:
В vue 2.2.3 вы можете использовать provide
и inject
для передачи функции от компонента-предка к дочернему элементу, например, от прародителя к дочернему элементу.
пожалуйста, обратитесь к следующему коду
// app.vue
<template>
<div id="app">
<HelloWorld msg="button1" />
<HelloWorld msg="button2" />
<HelloWorld msg="button3" />
count: {{ count }}
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld";
export default {
name: "App",
provide() {
return {
clickHandler: this.clickHandler,
};
},
data() {
return {
count: 0,
};
},
components: {
HelloWorld,
},
methods: {
clickHandler() {
this.count = 1;
console.log("click received");
},
},
};
</script>
// HelloWorld.vue
<template>
<button @click="clickHandler">{{ msg }}</button>
</template>
<script>
export default {
name: "HelloWorld",
inject: ["clickHandler"],
props: {
msg: String,
},
};
</script>
вы можете видеть, что одна и та же clickHandler
функция от родительского элемента выполняется с изменением родительской count
опоры по щелчку каждого дочернего элемента.
это clickHandler
может быть введено непосредственно любому потомку на любом уровне, поэтому приложение, подобное
parent > child.1 > child.1.1 > child.1.1.1 > child.1.1.1.1(click)
они child.1.1.1.1
могут быть введены с clickHandler
помощью родительской формы.
попробуйте код в codesandbox
также см. provide / inject
Комментарии:
1. Большое вам спасибо! Это именно то, что я искал!
2. @Evgeniy вы должны пометить ответ как принятый, если он соответствует вашим требованиям, чтобы другие пользователи из сообщества сочли его полезным.
Ответ №2:
если вам нужно такое же значение в иерархии или где-либо в текущем модуле, вам следует попробовать использовать библиотеку Vuex (управление состоянием).
Комментарии:
1. Не могли бы вы привести мне небольшой пример, пожалуйста?
2. Я надеюсь, что это может вам помочь => scotch.io/tutorials /…