[Organisation et partage] Méthodes et techniques courantes permettant aux composants parents de Vue d'appeler des composants enfants

PHPz
Libérer: 2023-04-12 09:55:21
original
15527 Les gens l'ont consulté

Dans le développement de Vue, nous rencontrons généralement des situations où nous devons appeler des composants enfants dans des composants parents. Dans ce cas, nous devons maîtriser quelques connaissances de base pour accomplir correctement cette tâche.

Cet article présentera quelques méthodes et techniques courantes pour implémenter la fonction du composant parent Vue appelant des composants enfants.

1. Utilisez $refs

Dans Vue, chaque composant a son propre attribut $refs et vous pouvez obtenir l'objet instance du composant. Par conséquent, nous pouvons obtenir l'objet instance du sous-composant via l'attribut $refs du composant parent, appelant ainsi la méthode du sous-composant ou accédant aux propriétés du sous-composant.

Voici un exemple simple montrant comment utiliser $refs pour appeler des composants enfants :

<template>
  <div>
    <child-component ref="child"></child-component>
    <button @click="callChildMethod">调用子组件方法</button>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  methods: {
    callChildMethod () {
      this.$refs.child.childMethod() // 调用子组件的方法
    }
  }
}
</script>
Copier après la connexion

Dans l'exemple ci-dessus, nous obtenons l'enfant en utilisant ref="child" dans le composant parent L'instance objet du composant, puis appelle la méthode childMethod() du composant enfant. ref="child"来获取子组件的实例对象,进而调用子组件的方法childMethod()

需要注意的是,如果子组件是通过v-for动态创建的,那么在父组件中通过$refs访问到的是一个数组,需要根据索引来选择对应的子组件实例。

二、使用事件

在Vue中,父组件可以通过$emit方法来触发子组件中的事件。而子组件则可以通过监听这些事件来与父组件进行通信。

下面是一个简单的例子,展示了如何使用事件在父组件和子组件之间进行通信:

// 子组件
<template>
  <div>
    <button @click="emitEvent">触发事件</button>
  </div>
</template>

<script>
export default {
  methods: {
    emitEvent () {
      this.$emit('my-event', 'hello') // 触发事件
    }
  }
}
</script>

// 父组件
<template>
  <div>
    <child-component @my-event="handleChildEvent"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleChildEvent (data) {
      console.log(data) // 打印子组件传递的数据
    }
  }
}
</script>
Copier après la connexion

在上述例子中,子组件通过this.$emit('my-event', 'hello')触发了一个名为my-event的事件,并且传递了一个数据hello。而父组件则通过在子组件中添加@my-event="handleChildEvent"来监听该事件,并且将事件的数据传递给了自己的方法handleChildEvent(data)

此外,我们还可以通过在子组件中申明一个props属性,然后在父组件中传递数据来实现深度的数据传递。

三、使用$parent

在某些情况下,我们可能需要在子组件中获取到自己的父组件实例对象,可以通过在子组件中使用$parent属性来获取父组件的实例对象。

下面是一个简单的例子,展示了如何使用$parent来获取父组件的实例对象:

// 子组件
<template>
  <div>{{parentMessage}}</div>
</template>

<script>
export default {
  computed: {
    parentMessage () {
      return this.$parent.message // 获取父组件的数据
    }
  }
}
</script>

// 父组件
<template>
  <div>
    <child-component></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      message: '这是父组件的数据'
    }
  }
}
</script>
Copier après la connexion

在上述例子中,子组件通过在computed属性中使用this.$parent.message来获取父组件的数据message

需要注意的是,如果组件层级嵌套过深,使用$parent

Il convient de noter que si le sous-composant est créé dynamiquement via v-for, alors ce qui est accessible via $refs dans le composant parent est un tableau, qui doit être basé sur Index pour sélectionner l’instance de sous-composant correspondante.

2. Utilisation d'événements

Dans Vue, les composants parents peuvent déclencher des événements dans les composants enfants via la méthode $emit. Les composants enfants peuvent communiquer avec les composants parents en écoutant ces événements. 🎜🎜Voici un exemple simple montrant comment utiliser des événements pour communiquer entre les composants parent et enfant : 🎜rrreee🎜Dans l'exemple ci-dessus, le composant enfant transmet this.$emit('my-event', 'hello') déclenche un événement nommé my-event et transmet une donnée hello. Le composant parent écoute l'événement en ajoutant @my-event="handleChildEvent" au composant enfant et transmet les données de l'événement à sa propre méthode handleChildEvent(data) code >. 🎜🎜De plus, nous pouvons également réaliser un transfert de données approfondi en déclarant un attribut props dans le composant enfant, puis en transmettant les données dans le composant parent. 🎜🎜3. Utilisez $parent🎜🎜Dans certains cas, nous pouvons avoir besoin d'obtenir notre propre objet d'instance de composant parent dans le composant enfant. Cela peut être obtenu en utilisant l'attribut $parent dans le composant enfant. . L'objet d'instance du composant parent. 🎜🎜Voici un exemple simple qui montre comment utiliser $parent pour obtenir l'objet instance du composant parent : 🎜rrreee🎜Dans l'exemple ci-dessus, le composant enfant est accessible en utilisant this dans le <code>calculé attribut .$parent.message pour obtenir les données message du composant parent. 🎜🎜Il convient de noter que si le niveau du composant est trop profondément imbriqué, l'utilisation de $parent peut entraîner une diminution de la lisibilité du code, donc dans le développement réel, il est nécessaire d'éviter un niveau d'imbrication trop profond. 🎜🎜Résumé🎜🎜Dans Vue, c'est une opération très courante pour un composant parent d'appeler un composant enfant. Nous pouvons établir une communication entre les composants parent et enfant en utilisant $refs, events et $parent. De plus, il existe de nombreuses autres méthodes, telles que l'utilisation de l'injection de dépendances ou de vuex et d'autres technologies, pour répondre aux différents besoins de développement. 🎜

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!