103 votes

Accéder à la fonction de données du composant props in vue

Je passe un accessoire à un composant:

 <template>
   {{messageId}}
   // other html code
</template>

<script>
   export default {
      props: ['messageId'],
      data: function(){
         var theData={
            // below line gives ReferenceError messageId is not defined
            somevar: messageId,
            // other object attributes
         }
      }
   }
</script>
 

Dans le code ci-dessus, j'ai commenté la ligne qui donne l'erreur. Si je supprime cette ligne, elle fonctionne normalement et le rendu du modèle est correct (et la valeur attendue de {{messageId}} est également visible). Par conséquent, la logique de transmission des données est correcte.

Il semble que la manière d'accéder aux messageId dans data () est fausse. Alors, comment puis-je accéder aux accessoires messageId dans les données?

98voto

thanksd Points 25423

À l'aide de la méthode data() , vous pouvez référencer les propriétés du composant à l'aide de this .

Donc dans votre cas:

 data: function() {
  var theData = {
    somevar: this.messageId,
    // other object attributes
  }

  return theData;
}
 

71voto

mufasa Points 128

Notez que cela ne fonctionne pas si vous utilisez une fonction de flèche pour assigner vos données:

 data: () => ({
  somevar: this.messageId // undefined
}),
 

Parce que this ne désignera pas le composant. Au lieu de cela, utilisez une ancienne fonction simple:

 data: function() {
  return { somevar: this.messageId }
},
 

16voto

Saurabh Points 29563

Pour affecter une propriété de données égale à un accessoire, vous pouvez utiliser watcher, comme suit:

 <script>
   export default {
      props: ['messageId'],
      data: function(){
         var theData={
            somevar: "",
            // other object attributes
         }
      },
      watch: {
        messageId: function(newVal) { 
           this.somevar = newVal
        }
      }
   }
 

0voto

Chinedu Ohagwu Points 1
<template>
   {{messaged}}
   // other HTML code
</template>

<script>
   export default {
      props: ['messaged'],
      data: function(){
         return () {
           some_var: this.messaged
         }
      },
      methods: {
      post_order: function () {
        console.log({
          some_var: this.some_var.id
        })
      }
    }

   }
</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X