我试图在我的vue组件上重新创建这个精确的内联编辑功能.但是,我可能错了,我看到一些语法已经过时Vue,特别是v-el正在使用的指令.我试图像这样更新语法:
new Vue({
el: '#app',
data: {
numbers: [{
val: 'one',
edit: false
},
{
val: 'two',
edit: false
},
{
val: 'three',
edit: false
}
]
},
methods: {
toggleEdit: function(ev, number) {
number.edit = !number.edit
// Focus input field
if (number.edit) {
Vue.nextTick(function() {
ev.$refs.input.focus(); // error occurs here
})
}
},
saveEdit: function(ev, number) {
//save your changes
this.toggleEdit(ev, number);
}
}
})Run Code Online (Sandbox Code Playgroud)
<div id="app">
<template v-for="number in numbers">
<span v-show="!number.edit"
v-on:click="toggleEdit(this, number)">{{number.val}}</span>
<input type="text"
ref="input"
v-model="number.val"
v-show="number.edit"
v-on:blur="saveEdit(ev, number)"> <br>
</template>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>Run Code Online (Sandbox Code Playgroud)
但是我收到了一系列错误...有关如何正确执行此操作的任何建议?
这是错误:
[Vue警告]:nextTick出错:"TypeError:undefined不是对象(评估'ev.$ refs.input')"
许多事情从Vue.js 1.x变为2.x. 我将引导您完成您的片段中所需的更改:
v-repeat 应该 v-forv-el="input"withref="input"
ref="input"内部使用a v-for,因此this.$refs.input将是一个元素数组,而不是单个元素.index在以下内容中包含变量的原因v-for:v-for="(number, index) in numbers"index 代替而不是ev函数传递给函数,以便<input>稍后使用vm.$refs.input[index].focus();这就是它.改变后你会得到:
new Vue({
el: '#app',
data: {
numbers: [
{
val: 'one',
edit: false
},
{ val: 'two',
edit: false
},
{
val: 'three',
edit: false
}
]
},
methods: {
toggleEdit: function(index, number){
number.edit = !number.edit;
// Focus input field
var vm = this;
if (number.edit){
Vue.nextTick(function() {
vm.$refs.input[index].focus();
})
}
},
saveEdit: function(index, number){
//save your changes
this.toggleEdit(index, number);
}
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>
<div id="app">
<template v-for="(number, index) in numbers">
<span v-show="!number.edit"
v-on:click="toggleEdit(index, number)">{{number.val}}</span>
<input type="text"
ref="input"
v-model="number.val"
v-show="number.edit"
v-on:blur="saveEdit(index, number)"> <br>
</template>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4780 次 |
| 最近记录: |