2016-11-29 3 views
1

Ich habe eine dynamische Komponente, die zur Laufzeit mithilfe der dokumentierten dynamischen Komponentensyntax aufgelöst und gebunden wird;Vue Dynamische Komponente Ereignisbindungen

Entschieden mit einer Stütze bei der Montage zugewiesen.

Aus irgendeinem Grund, wenn die Child-Komponente, dynamisch gerendert, ein Ereignis this.$emit('eventName', /*someData*/) ausstrahlt, scheint der Elternteil nicht in der Lage zu sein, es zu hören. Ist der in Standardkomponenten verwendete Ansatz für die dynamisch gerenderten Ansätze anwendbar? Requisiten scheinen zu funktionieren, also mache ich vielleicht etwas nicht richtig?

Antwort

1

ja können Sie Requisiten mit dynamischen Komponenten verwenden es nur Sie Klein Bindestrich verwenden müssen (Kebab-Fall) Namen für die HTML-Attribut, das heißt

<component v-if="component" :is="component" @value-updated="onUpdate"></component> 

Vue.component('foo', { 
 
    template: ` 
 
\t \t <div> 
 
     \t <button @click="$emit('value-updated', { bar: 'baz' })">pass data</button 
 
     </div> 
 
    ` 
 
}); 
 

 
new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    \t currentComponent: 'foo', 
 
     output: {}, 
 
    }, 
 
    methods: { 
 
    \t onUpdate (payload) { 
 
     \t this.output = payload 
 
     } 
 
    } 
 
})
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 
<div id="app"> 
 
    <component v-if="currentComponent" :is="currentComponent" @value-updated="onUpdate"></component> 
 
    <pre>{{ output }}</pre> 
 
</div>

+0

aktualisiert Antwort - Ich bin mir nicht sicher, warum ich das Prop-Beispiel als nicht relevant hier hinzugefügt habe - stellen Sie sicher, dass Sie Kebab-Fall verwenden und den Ereignisnamen ausgeben: 'this. $ emit ('value-updated', {foo: 'bar'})' – GuyC

+0

Ah I sehen. Also gibt es eine Übersetzung zwischen Camel und Kebab? Probieren Sie es aus, also wird es als Antwort markieren, wenn Sie es ausprobieren –