vue.js - 我想使用 Nuxt.js 添加编辑功能
问题描述
我想要实现的
我正在创建 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
出于某种原因,我收到了一个以前看不到的错误
解决方案
您的代码中的属性/数据类型有点混乱。
在这里,您正在访问state.todos.list
...
todos () {
return this.$store.state.todos.list
},
...但是在您的商店中, conststate
不包括todos
:
export const state = () => ({
list: []
})
此外,您正在写入itemText
的内容todos
,它应该是一个字符串,但实际上是一个对象 - 这会导致[object Object]
.
toEdit (todo) {
this.editIndex = true
this.itemText = this.todos
},
另外,请查看 Kissu 对突变的评论。
推荐阅读
- python - 如何获取 TCP 包的包数?
- python - 在 Python GTK 中从 ListBox(绑定到 ListStore)中获取选定对象
- jquery - 如何在 Kendo Grid 列中显示复选框
- winapi - FP-precision related "Debug Assertion Failed!" (I have no idea why this is happening)
- android - 无法安装 Apk 更新版本
- python - discord.py 上是否有用于用户名更改的事件处理程序?
- django - How to prevent default image from being deleted when a user gets deleted?
- php - 在同一页面上使用 2 recaptcha 并通过 AJAX 为两者获取不同的值
- javascript - 为什么我没有被重定向到我选择的路径?反应路由器
- php - 跳过提交页面的php后退按钮