前提・実現したいこと
todoリストを作成しています。編集機能の実装が思うようにいかないので知恵を貸して頂きたいです。
具体的には編集が完了した後に保存ボタンを押すとエラーが出てしまいます。
[実装したい内容]
①画像の追加したリストの横にあるドットアイコンを押すと編集するという文字が表示されます。
②クリックすると、「リストを追加しています」の記載が、todo入力箇所に表示される
③保存をクリックすると変更が元のtodoの場所に表示される ←ここが反映されずエラーが出てしまう
以上よろしくお願いいたします。
発生している問題・エラーメッセージ
Cannot read property 'text' of undefined
該当のソースコード
template
1 <template #activator="{ on, attrs }"> 2 <v-btn 3 v-bind="attrs" 4 icon 5 class="mt-6" 6 v-on="on" 7 > 8 <v-icon> 9 mdi-dots-vertical 10 </v-icon> 11 </v-btn> 12 </template> 13 <v-list> 14 <v-list-item 15 link 16 > 17 <v-list-item-title @click="toEdit(todo)"> 18 <v-icon>mdi-pencil</v-icon> 19 編集 20 </v-list-item-title> 21 </v-list-item> 22 </v-list> 23 <v-list> 24 <v-list-item 25 link 26 > 27 <v-list-item-title @click="removeTodo(todo)"> 28 <v-icon>mdi-delete</v-icon> 29 削除 30 </v-list-item-title> 31 </v-list-item> 32 </v-list> 33 </v-menu> 34 </v-row> 35 36 <v-text-field 37 v-model="itemText" 38 filled 39 color="pink lighten-3" 40 auto-grow 41 /> 42 <v-btn 43 :disabled="disabled" 44 @click="addTodo" 45 > 46 保存 47 </v-btn> 48
script
1export default { 2 data () { 3 return { 4 editIndex: false, //編集状態の時はtrueになる 5 itemText: '', 6 selectedTodo: [],//toEditメソッドを実行すると選択されたtodo情報が配列に入れられる 7 items: [ 8 { title: '編集', icon: 'mdi-pencil' }, 9 { title: '削除', icon: 'mdi-delete' } 10 ] 11 } 12 }, 13 14 computed: { 15//todoリストをstoreから呼び出す 16 todos () { 17 return this.$store.state.todos.list 18 }, 19 20 disabled () { 21 return this.itemText.length === 0 22 } 23 }, 24 25 methods: { 26//新規todoリスト追加。editIndexがtrueの場合はtodos/editで編集を反映させる 27 addTodo () { 28 if (this.editIndex === false) { 29 this.$store.commit('todos/add', this.itemText) 30 this.itemText = '' 31 } else { 32 // this.selectedTodo・・・編集対象のリストを取得 33 // this.itemText・・・編集テキストを反映させる 34 this.$store.commit('todos/edit', this.selectedTodo, this.itemText) 35 this.itemText = '' 36 this.editIndex = false 37 } 38 }, 39//編集 40 toEdit (todo) { 41 this.editIndex = true //todo追加ボタンをクリックした時の処理を分ける 42 this.selectedTodo = this.todo //選択されたリストをselectedTodoで管理 43 this.itemText = todo.text // 編集対象を入力欄に入れる 44 }, 45//削除 46 removeTodo (todo) { 47 this.$store.commit('todos/remove', todo) 48 } 49 } 50} 51</script> 52
store
1export const state = () => ({ 2//todoリストを配列で保存 3 list: [] 4}) 5 6export const mutations = { 7export const state = () => ({ 8 list: [] 9}) 10 11export const mutations = { 12 add (state, text) { 13 state.list.push({ 14 text 15 }) 16 }, 17 remove (state, todo) { 18 state.list.splice(state.list.indexOf(todo), 1) 19 }, 20 21// 引数todo・・・編集対象を取得 22/ /引数tex・・・変更したテキストを 23 edit (state, todo, text) { 24 state.list.splice(state.list.indexOf(todo), 1, text) 25 } 26} 27
試したこと
Cannot read property 'text' of undefined
上記のエラーでstore/editで編集箇所をstore/editが取得できていないのではないかと思い、選択した値をselectedTodoに格納してからstoreに送るようにしましたがエラーは変わりませんでした。
edit
1 state.list.splice(state.list.indexOf(todo), 1, text) 2 }
補足情報(FW/ツールのバージョンなど)
・Nuxt2.15
・Vuetify
・Rails6.1
あなたの回答
tips
プレビュー