【发布时间】:2021-09-26 04:47:12
【问题描述】:
我想要实现的事情
我正在创建 TodoLists。 我尝试实现以下编辑功能,但没有成功,我遇到了问题。
- 单击编辑按钮可在输入字段中显示编辑文本
- 如果您在输入字段中输入更改后单击保存按钮,更改将反映在第一个位置。
代码
<v-row v-for="(todo,index) in todos" :key="index">
<v-text-field
filled
readonly
:value="todo.text"
class="ma-3"
auto-grow
/>
<v-menu
top
rounded
>
<template #activator="{ on, attrs }">
<v-btn
v-bind="attrs"
icon
class="mt-6"
v-on="on"
>
<v-icon>
mdi-dots-vertical
</v-icon>
</v-btn>
</template>
<v-list>
<v-list-item
link
>
<v-list-item-title @click="toEdit(todos)">
<v-icon>mdi-pencil</v-icon>
Edit
</v-list-item-title>
</v-list-item>
</v-list>
<v-list>
<v-list-item
link
>
<v-list-item-title @click="removeTodo(todo)">
<v-icon>mdi-delete</v-icon>
Delete
</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-row>
<v-text-field
v-model="itemText"
filled
color="pink lighten-3"
auto-grow
@keyup.enter="addTodo"
/>
<v-btn
:disabled="disabled"
@click="addTodo"
>
Save
</v-btn>
data () {
return {
editIndex: false,
hidden: false,
itemText: '',
items: [
{ title: 'Edit', icon: 'mdi-pencil' },
{ title: 'Delete', icon: 'mdi-delete' }
]
}
},
computed: {
todos () {
return this.$store.state.todos.list
},
disabled () {
return this.itemText.length === 0
}
},
methods: {
addTodo (todo) {
if (this.editIndex === false) {
this.$store.commit('todos/add', this.itemText)
this.itemText = ''
} else {
this.$store.commit('todos/edit', this.itemText, todo)
this.itemText = ''
}
},
toEdit (todo) {
this.editIndex = true
this.itemText = this.todos
},
removeTodo (todo) {
this.$store.commit('todos/remove', todo)
}
}
}
</script>
export const state = () => ({
list: []
})
export const mutations = {
add (state, text) {
state.list.push({
text
})
},
remove (state, todo) {
state.list.splice(state.list.indexOf(todo), 1)
},
edit (state, text, todo) {
state.list.splice(state.list.indexOf(todo), 1, text)
}
}
错误
我自己尝试过的
//methods
toEdit (todo) {
this.editIndex = true
this.itemText = this.todos.text //add
},
// Cannot read property 'length' of undefined
由于某种原因,我收到了一个以前看不到的错误
【问题讨论】:
-
两件事:你不应该提交突变,而是使用
dispatch并调用操作。您的突变需要 3 个参数,但这不是它的工作方式。检查此链接:vuex.vuejs.org/api/#Vuex-store-instance-methods 和此链接:vuex.vuejs.org/api/#mutations 另外,请阅读指南,它可以帮助您更好地了解 Vuex。 -
感谢您的评论。使参数成为对象。
标签: vue.js nuxt.js vuetify.js vuex