Comment mettre à jour la valeur des accessoires du composant enfant à partir du composant parent?


drake035

À partir de mon parentcomposant, je dois déclencher une childpartie de code d' un composant contenant une Firebaserequête. Notez que dans le composant enfant, ce code est déclenché dans le mounted()hook (mais pour l'exécuter à partir du composant parent, je suppose que je devrai déplacer ce code vers une méthode ou quelque chose).

Quelle est la manière recommandée pour réaliser une telle chose?

Voici mon parentcode de composant - simplifié pour plus de clarté:

<template>
  <div>
    <nav>
      <v-btn @click="viewNextWeek"></v-btn>
    </nav>
    <project-row :mon="mon"></new-row-form>
  </div>
</template>

<script>
import ProjectRow from './ProjectRow.vue';
import store from '../store';
import moment from 'moment';

export default {
  name: 'home',
  components: {
    ProjectRow
  },
  data() {
    return {
      mon: moment().startOf('isoWeek')
    }
  },
  methods: {
    viewNextWeek: function() {
      this.mon = moment().startOf('isoWeek').add(7, 'days');
    }
  }
}
</script>

Child composant - simplifié aussi:

<template>
  <div>
    <input v-model="monTime">
  </div>
</template>

<script>
import { db } from '../firebase';

export default {
  props: [
    'mon'
  ],
  mounted() {
    var timesRef = db.collection('times');
    var timesWeek = timesRef.where('date', '==', this.mon);
    timesWeek.get()
    .then((querySnapshot) => {      
      querySnapshot.forEach((doc) => {
        this.monTime = doc.data().time;
      });
    })
    .catch(function(error) {
      console.log('Error getting documents: ', error);
    });  
  }
}
</script>
Thamer

pour y parvenir, vous devez utiliser la event buscommunication entre ces deux composants. Tout d'abord, vous devez créer un bus d'événements global qui peut être une gestion centrale des événements et vous donnera la possibilité d'accéder à n'importe quel événement à partir de n'importe quel composant de votre application vuejs. dans votre cas ici, vous devez émettre un événement à partir de votre composant parent dans la viewNextWeekméthode et le capturer mounteddans le composant enfant. Ainsi, chaque fois que votre monvaleur change dans votre composant parent, déclenchera un événement pour le composant enfant à mettre à jour à l' monintérieur.

pour plus de détails sur l'utilisation du bus d'événements global, lisez cet article article sur le bus d'événements global

Articles connexes


Comment mettre à jour les accessoires du composant enfant ?

Daniel Movsesyan J'ai une application de liste de tâches et elle obtient des données du serveur. Ensuite, j'ai un composant enfant de recherche qui prend l'état de son parent comme accessoire, puis lorsque vous recherchez quelque chose, il filtre et met à jour