Maison > Article > interface Web > Les accessoires peuvent-ils transmettre des fonctions dans vue ?
Les accessoires dans vue peuvent transmettre des fonctions ; les chaînes, les tableaux, les nombres et les objets peuvent être transmis comme accessoires dans vue. Le but est de recevoir des données transmises de l'extérieur. la syntaxe est "export default {methods : {myFunction() {// ...}}} ;".
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Vue3, ordinateur Dell G3.
Vue est une question courante que les débutants posent souvent. Les chaînes, tableaux, nombres et objets peuvent être transmis en tant que props
. Mais pouvez-vous passer une fonction en tant que props
? props
传递。但是你能把一个函数当作一个props
来传递吗?
虽然可以将函数作为props
props
, ce n'est pas bon. Au contraire, Vue dispose d'une fonctionnalité spécialement conçue pour résoudre ce problème, examinons-la ensuite. <template> <ChildComponent :function="myFunction" /> </template> export default { methods: { myFunction() { // ... } } };Comme dit précédemment, vous ne devriez jamais faire quelque chose comme ça dans Vue. Pourquoi ? Vue a quelque chose de mieux.
// ChildComponent export default { created() { this.$emit('created'); } }Dans le composant parent, nous écoutons l'événement :
<template> <ChildComponent @created="handleCreate" /> </template> export default { methods: { handleCreate() { console.log('Child has been created.'); } } };Il y a beaucoup plus de choses que vous pouvez faire avec les événements et ce n'est que de la fourrure. Il est fortement recommandé de consulter la documentation officielle de Vue pour en savoir plus, cela vaut vraiment la peine d'être lu. Mais les événements ne peuvent pas résoudre complètement tous nos problèmes.
「Obtenir la valeur de la classe parent」
Si vous souhaitez que le composant enfant accède à la méthode du composant parent, alors il semble simple et direct de passer la méthode directement en tant qu'accessoire. Dans le composant parent, nous ferions ceci :<!-- Parent --> <template> <ChildComponent :method="parentMethod" /> </template> // Parent export default { methods: { parentMethod() { // ... } } }Dans notre composant enfant, utilisez la méthode transmise :
// Child export default { props: { method: { type: Function }, }, mounted() { // Use the parent function directly here this.method(); } }Quel serait le problème en faisant cela ? Ce n'est pas complètement faux, mais il vaudrait mieux utiliser les événements dans ce cas. Ensuite, en cas de besoin, le composant enfant n'appelle pas la fonction mais émet simplement un événement. Le composant parent recevra alors l'événement, appellera la fonction et l'assembly mettra à jour le accessoire transmis au composant enfant. C'est une meilleure façon d'obtenir le même effet. Dans d'autres cas, nous pouvons vouloir obtenir une valeur d'un élément enfant vers l'élément parent, et nous utilisons une fonction pour cela. Par exemple, vous pourriez faire ceci. La fonction parent accepte la valeur de la fonction enfant et la traite :
<!-- Parent --> <template> <ChildComponent :method="parentMethod" /> </template> // Parent export default { methods: { parentMethod(valueFromChild) { // Do something with the value console.log('From the child:', valueFromChild); } } }Appeler la méthode passée dans le composant enfant et passer la valeur du composant enfant en paramètre de la méthode :
// Child export default { props: { method: { type: Function }, }, data() { return { value: 'I am the child.' }; }, mounted() { // Pass a value to the parent through the function this.method(this.value); } }Ce n'est pas complètement faux, faire cela est faisable. Ce n'est tout simplement pas la meilleure façon de le faire dans Vue. Au lieu de cela, les événements sont mieux adaptés pour résoudre le problème. Nous pouvons réaliser exactement la même chose en utilisant des événements
<!-- Parent --> <template> <ChildComponent @send-message="handleSendMessage" /> </template> // Parent export default { methods: { handleSendMessage(event, value) { // Our event handler gets the event, as well as any // arguments the child passes to the event console.log('From the child:', value); } } }Dans les composants enfants, nous émettons des événements :
// Child export default { props: { method: { type: Function }, }, data() { return { value: 'I am the child.' }; }, mounted() { // Instead of calling the method we emit an event this.$emit('send-message', this.value); } }Les événements sont très utiles dans Vue, mais ils ne résolvent pas non plus notre problème à 100 %. Parfois, nous devons accéder à la portée de l'enfant depuis le parent d'une manière différente. Pour cela nous utilisons des slots scoped !
【Recommandation associée : "Tutoriel vue.js"】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!