Прежде всего, вы не должны использовать одновременно v-model
и :value
в одном элементе / компоненте. Я предполагаю, что вы просто хотите привязать ввод к каждому todo.datatype
.
Вы можете назначить атрибут ref
своим входам, который, поскольку они находятся в итераторе v-for
, создаст массив в свойстве $refs
вашего компонента.
Затем вы можете использовать его для управления фокусом.
Например,
new Vue({
el: "#app",
data: {
todos: [
{ id: "1", datatype: "" },
{ id: "2", datatype: "" },
{ id: "3", datatype: "" }
]
},
methods: {
moveToNextField(value, index) {
const nextIndex = index + 1
if (nextIndex < this.todos.length && value.length > 5) {
this.$refs.todos[nextIndex].focus()
}
}
}
})
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
<div id="app">
<h2>Input Fields:</h2>
<div v-for="(todo, index) in todos" :key="todo.id">
<input
type="text"
v-model="todo.datatype"
placeholder="Insert Datatype"
ref="todos"
@input="moveToNextField($event.target.value, index)">
<br>
</div>
</div>
Вышеупомянутое будет отлично работать и с BootstrapVue.