Le contexte
Dans Vue 2.0, la documentation et d' autres indiquent clairement que la communication du parent à l'enfant se fait via des accessoires.
Question
Comment un parent informe-t-il son enfant qu'un événement s'est produit via des accessoires?
Dois-je simplement regarder un accessoire appelé événement? Cela ne semble pas juste, pas plus que les alternatives ( $emit
/ $on
est pour l'enfant à parent, et un modèle de hub est pour les éléments distants).
Exemple
J'ai un conteneur parent et il doit indiquer à son conteneur enfant qu'il est normal d'engager certaines actions sur une API. J'ai besoin de pouvoir déclencher des fonctions.
la source
ref
au lieu de créer un accessoire, qui surveille sa valeur puis l'émet vers une autre fonction dans le parent? Je veux dire qu'il a beaucoup de choses à faire, mais est-ce que l'utilisation estref
encore sûre? Merciref
c'est sûr. Généralement, c'est déconseillé car la communauté Vue préfère transmettre l'état aux enfants et les événements au parent. De manière générale, cela conduit à des composants plus isolés et cohérents en interne (une bonne chose ™). Mais, si les informations que vous transmettez à l'enfant sont vraiment un événement (ou une commande), modifier l'état n'est pas le bon modèle. Dans ce cas, appeler une méthode en utilisant aref
est tout à fait correct, et cela ne plantera pas ou quoi que ce soit.Ce que vous décrivez est un changement d'état chez le parent. Vous transmettez cela à l'enfant via un accessoire. Comme vous l'avez suggéré, vous auriez
watch
cet accessoire. Lorsque l'enfant prend des mesures, il en informe le parent via unemit
, et le parent peut alors modifier à nouveau l'état.Afficher l'extrait de code
Si vous voulez vraiment passer des événements à un enfant, vous pouvez le faire en créant un bus (qui n'est qu'une instance de Vue) et en le passant à l'enfant en tant qu'accessoire .
la source
v-model
sur le composant, vous pouvez également réinitialiser facilement la valeur en émettant l'événement correspondant avec moins de code.prop
chez un enfant, une propriété supplémentaire dansdata
, puis ajouterwatch
... Ce serait confortable s'il y avait un support intégré pour transférer en quelque sorte les événements du parent à l'enfant. Cette situation se produit assez souvent.Vous pouvez utiliser
$emit
et$on
. Utilisation du code @RoyJ:html:
javascript:
Exemple en cours d'exécution: https://jsfiddle.net/rjurado/m2spy60r/1/
la source
Si vous avez le temps, utilisez Vuex store pour regarder les variables (aka state) ou déclencher (aka dispatch) une action directement.
la source
N'a pas aimé l' approche du bus d'événements utilisant des
$on
liaisons chez l'enfant pendantcreate
. Pourquoi?create
Appels ultérieurs (j'utilisevue-router
) lient le gestionnaire de messages plus d'une fois, ce qui entraîne plusieurs réponses par message.La solution orthodoxe consistant à faire passer des accessoires de parent à enfant et à mettre un surveillant de propriété chez l'enfant fonctionnait un peu mieux. Seul hic étant que l'enfant ne peut agir que sur une transition de valeur. Passer le même message plusieurs fois nécessite une sorte de comptabilité pour forcer une transition afin que l'enfant puisse récupérer la monnaie.
J'ai constaté que si j'emballe le message dans un tableau, cela déclenchera toujours l'observateur enfant - même si la valeur reste la même.
Parent:
Enfant:
HTML:
la source
Un moyen découplé simple d'appeler des méthodes sur des composants enfants consiste à émettre un gestionnaire depuis l'enfant, puis à l'appeler depuis le parent.
Le parent effectue le suivi des fonctions du gestionnaire enfant et des appels chaque fois que nécessaire.
la source
L'exemple ci-dessous est auto-explicatif. où les références et les événements peuvent être utilisés pour appeler la fonction depuis et vers le parent et l'enfant.
la source
Je pense que nous devrions tenir compte de la nécessité pour le parent d'utiliser les méthodes de l'enfant.En fait, les parents n'ont pas à se soucier de la méthode de l'enfant, mais peuvent traiter le composant enfant comme un FSA (machine à états finis). pour contrôler l'état du composant enfant.Ainsi, la solution pour observer le changement d'état ou simplement utiliser la fonction de calcul suffit
la source
vous pouvez utiliser la clé pour recharger le composant enfant en utilisant la clé
Si vous souhaitez recharger le composant avec un nouveau filtre, si vous cliquez sur le bouton, filtrez le composant enfant
et utilisez le filtre pour déclencher la fonction
la source