Мое приложение состоит из:
Компонент с именем
<consl :output="output" @submit-to-vue><consl>
, который содержит ввод, который вызывает метод submit () при нажатии клавиши ввода.
<div>
<output v-html="output"></output>
<div id="input-line" class="input-line">
<div class="prompt">{{ prompt }}</div>
<div>
<input class="cmdline" autofocus
v-model.trim="command"
@keyup.enter="submit"
:readonly="submited" />
</div>
</div>
Затем метод submit()
отправляет событие @submit-to-vue
в родительский метод submitv()
, который создает экземпляр того же компонента и добавляет его в DOM.
//........
methods: {
submit: function () {
this.$emit('submit-to-vue')
this.submited = true
}
},
и
//......
methods: {
submitv: function () {
var ComponentClass = Vue.extend(consl)
var instance = new ComponentClass({
propsData: { output: this.output }
})
instance.$mount() // pass nothing
this.$refs.container.appendChild(instance.$el)
Чего я хочу достичь?
Я хочу создать новый компонент consl и добавлять его в DOM каждый раз, когда отправляется старый. (Я хочу, чтобы мое приложение имитировало терминал)
Проблема
При отправке новый созданный компонент не содержит прослушивателя событий @submit-to-vue
, что не позволяет вызвать метод submitv()
.
Вопросы
- Как я могу решить эту проблему?
- Это правильный способ делать что-то в VueJ или есть более изящный способ?