J'essaie de passer la référence du composant actuel à un composant enfant comme ceci:
<template>
<div class="screen" ref="screen">
<child-component :screenRef="screenRef">
</child-component>
</div>
</template>
<script>
const Parent = {
name: 'parent',
data: {
screenRef: {}
},
mounted() {
this.screenRef = this.$refs['screen']
}
}
</script>
Étant donné que les types Vue.js ne prennent pas en charge HTMLDivElement
, j'obtiens une erreur dans le composant enfant lorsque je définis screenRef
comme accessoire.
const ChildComponent = {
name: 'child',
props: {
screen: {
type: HTMLDivElement,
default: {}
}
}
}
Quelqu'un pourrait-il indiquer la bonne façon de procéder?
Essayez simplement d'accéder au parent depuis le composant enfant via:
this.$parent
ou
this.$el.parent
ou utilisez l'option inheritAttrs dans le composant enfant pour le passage non transparent des attributs du parent à l'enfant:
const ChildComponent = {
inheritAttrs: true,
name: 'child',
props: {
screen: {
type: HTMLDivElement,
default: {}
}
}
}
Vous faites tout correctement. Ne déclarez tout simplement pas le type
requis pour la propriété screen
dans le composant enfant. Le props: {screen: {default: {}}}
Suivant fera l'affaire.
Comme notes annexes:
Le crochet mounted
est le bon endroit pour affecter les éléments $refs
Aux éléments $data
Comme ancien n'est pas défini à created
hook.
Vue hastype: object
Qui fonctionnerait toujours bien pour votre validation de type d'accessoire screen
si vous souhaitez appliquer la validation du type d'accessoire.
Si, par hasard, vous souhaitez attribuer la valeur d'objet default
autre que le {}
Vide, vous devez l'affecter via la fonction (contrairement aux types de données non-objet):
default: function () {
return {a: 1, b: 2}
}
Si vous avez besoin de données provenant de différents composants, passez-les simplement avec des accessoires.
Ou si vous avez besoin de ces données dans plusieurs composants, essayez Vuex: