J'essaie de créer un composant dynamique dans un composant défini comme ci-dessous:
Composant principal (devrait créer dynamiquement le composant extform-input
lorsqu'il est appelé)
... components: { 'extform-input' : ExtformInput }, methods : { changeType: function () { var self = this var TheComponent = this.$options.components['extform-input']; self.$addChild(TheComponent); } ...
Je reçois une erreur self.$addChild is not a function
Si le composant est déjà monté, c'est-à-dire défini comme un composant globalement à l'aide de Vue(tag,constructor)
il suffit d'ajouter une nouvelle instance de composant important à l'aide du mot-clé parent
pour définir l'instance parent de composant.
NB: à partir de vue js V-1.0.12, la $addChild
été supprimée
components: { 'extform-input' : ExtformInput }, methods : { changeType: function() { var self = this var Child = this.$options.components['extform-input']; var child = new Child({ el: this.$el.querySelector('.child-host'), \\ define the el of component parent: this, \\ define parent of component }); } }
Voir la démo codepen http://codepen.io/obonyojimmy/pen/ONwKZX
Il se peut que votre portée soit différente de ce que vous pensez. Il suffit de console.log(this)
et de découvrir la portée de this or self
ou pouvez-vous partager l'intégralité du code?
Vous ne pouvez pas instancier dynamiquement les composants dans Vue js. Voici une discussion sur le sujet, et une question similaire (j'ai fait cette question). Mais, même si vous ne pouvez pas ajouter de composants dynamiquement, vous pouvez faire ce que vous voulez faire, autrement. Au lieu d'ajouter l'enfant, il faut le montrer en l'ajoutant au DOM, si vous souhaitez ajouter un seul composant, utilisez v-if
(par exemple, vous n'êtes pas écrasant / affiché un élément, vous ajoutez / supprimez du DOM) . Et si vous souhaitez ajouter un nombre variable de composants à la volée, utilisez v-for
. Les détails sont sur la question référencée pour le v-for
way